当前位置: 技术问答>linux和unix
socket传输int型数字的问题
来源: 互联网 发布时间:2017-03-07
本文导语: 请问用socket如何传输int 类型的值啊? 比如:现在有两个数字s和l, s是unsigned short型的, l是unsigned int型的: unsigned short s = 110; unsigned int 1 = 800; 当然110和800这两个数字是我随便举的, 我现在需要把s和l这...
请问用socket如何传输int 类型的值啊? 比如:现在有两个数字s和l, s是unsigned short型的, l是unsigned int型的:
unsigned short s = 110;
unsigned int 1 = 800;
当然110和800这两个数字是我随便举的, 我现在需要把s和l这两个数字写入一个socket中, 然后传递到网络的另一端,另外一段收到数据包后, 可以得到s=110, l=800。 该如何写啊?
只需要把关键的地方些出来就行了。
unsigned short s = 110;
unsigned int 1 = 800;
当然110和800这两个数字是我随便举的, 我现在需要把s和l这两个数字写入一个socket中, 然后传递到网络的另一端,另外一段收到数据包后, 可以得到s=110, l=800。 该如何写啊?
只需要把关键的地方些出来就行了。
|
声明一个char [6]
memcpy进去,接收端memcpy出来
memcpy进去,接收端memcpy出来
|
你事先协商好字节序呗
都是小端的x86机器何必再去搞大端的网络字节序,直接memcpy就行了
真要变成网络字节序也可以啊,socket不就有htonl么
都是小端的x86机器何必再去搞大端的网络字节序,直接memcpy就行了
真要变成网络字节序也可以啊,socket不就有htonl么
|
lz想多了,socket把所有数据都当作二进制流传输
int a;
write(socketfd,&a,sizeof(a));
int b;
read(socketxx,&b,sizeof(b));
int a;
write(socketfd,&a,sizeof(a));
int b;
read(socketxx,&b,sizeof(b));
|
unsigned short s = 110;
unsigned int 1 = 800;
char buf[512];
//...
memset(buf, 0, sizeof(buf));
sprintf(buf, "%hu#%u#", s, l); //格式化, #表示一个数结束
write(sockfd, buf, sizeof(buf)); //发送出去
接收端
//...
read(sockfd, buf, sizeof(buf)); //接收
//再将数据还原