+ -
当前位置:首页 → 问答吧 → socket传输int型数字的问题

socket传输int型数字的问题

时间:2011-09-22

来源:互联网

请问用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。 该如何写啊?

只需要把关键的地方些出来就行了。

作者: linux_6   发布时间: 2011-09-22

声明一个char [6]

memcpy进去,接收端memcpy出来

作者: jackyjkchen   发布时间: 2011-09-22

引用 1 楼 jackyjkchen 的回复:

声明一个char [6]

memcpy进去,接收端memcpy出来


不会吧,不是还需要做什么网络字节转换什么的吗? 再说,在发送端申明一个char [6]然后把这两个数字拷贝进去到可以理解, 但是接收端,你怎么从char [6]里把它memcpy到unsigned short和unsigned int里啊?

作者: linux_6   发布时间: 2011-09-22

我一百个不相信这个问题居然没有人会!!!!!!

作者: linux_6   发布时间: 2011-09-22

你事先协商好字节序呗

都是小端的x86机器何必再去搞大端的网络字节序,直接memcpy就行了

真要变成网络字节序也可以啊,socket不就有htonl么

作者: jackyjkchen   发布时间: 2011-09-22

引用 2 楼 linux_6 的回复:

引用 1 楼 jackyjkchen 的回复:

声明一个char [6]

memcpy进去,接收端memcpy出来


不会吧,不是还需要做什么网络字节转换什么的吗? 再说,在发送端申明一个char [6]然后把这两个数字拷贝进去到可以理解, 但是接收端,你怎么从char [6]里把它memcpy到unsigned short和unsigned int里啊?


memcpy当然是双向的,源地址目标地址都是void*,随你写什么

作者: jackyjkchen   发布时间: 2011-09-22

1,将short转化为网络字节序
2,将两个short类型的变量放到将要发送的buffer中,可以调用sprintf、memcpy之类的函数
3,发送出去

作者: thefirstz   发布时间: 2011-09-22

放在一个结构体里面。

作者: zjf30366   发布时间: 2011-09-22

htonl转unsigned int,htons转unsigned short,之后直接send(&s,sizeof(unsigned short)),send(&l,sizeof(unsignd int)).

接收端recv之后,用ntohs,ntohl转一下就可以了.

作者: qq120848369   发布时间: 2011-09-22