socket传输int型数字的问题

linux_6 2011-09-22 03:32:02
请问用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。 该如何写啊?

只需要把关键的地方些出来就行了。
...全文
1507 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
yh176550981 2012-07-29
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]

除非双方的系统可能是不同架构的,否则是无需转网络序的,直接当二进制流。转序是要耗费时间的。
[/Quote]
要耗费多少时间?4次加法运算?这种时间怎么能省,你做服务器的话肯定是要转译的
hml1006 2011-09-23
  • 打赏
  • 举报
回复
lz想多了,socket把所有数据都当作二进制流传输
int a;
write(socketfd,&a,sizeof(a));




int b;
read(socketxx,&b,sizeof(b));
seucs 2011-09-23
  • 打赏
  • 举报
回复

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)); //接收
//再将数据还原
辰岡墨竹 2011-09-23
  • 打赏
  • 举报
回复
除非双方的系统可能是不同架构的,否则是无需转网络序的,直接当二进制流。转序是要耗费时间的。
bucherren 2011-09-23
  • 打赏
  • 举报
回复
好像要转换网络序的
qq120848369 2011-09-22
  • 打赏
  • 举报
回复
htonl转unsigned int,htons转unsigned short,之后直接send(&s,sizeof(unsigned short)),send(&l,sizeof(unsignd int)).

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

zjf30366 2011-09-22
  • 打赏
  • 举报
回复
放在一个结构体里面。
昵称很不好取 2011-09-22
  • 打赏
  • 举报
回复
1,将short转化为网络字节序
2,将两个short类型的变量放到将要发送的buffer中,可以调用sprintf、memcpy之类的函数
3,发送出去
jackyjkchen 2011-09-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 linux_6 的回复:]

引用 1 楼 jackyjkchen 的回复:

声明一个char [6]

memcpy进去,接收端memcpy出来


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

memcpy当然是双向的,源地址目标地址都是void*,随你写什么
jackyjkchen 2011-09-22
  • 打赏
  • 举报
回复
你事先协商好字节序呗

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

真要变成网络字节序也可以啊,socket不就有htonl么
linux_6 2011-09-22
  • 打赏
  • 举报
回复
我一百个不相信这个问题居然没有人会!!!!!!
linux_6 2011-09-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jackyjkchen 的回复:]

声明一个char [6]

memcpy进去,接收端memcpy出来
[/Quote]

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

memcpy进去,接收端memcpy出来

23,209

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧