免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4344 | 回复: 4
打印 上一主题 下一主题

socket通讯,先发一个4字节的长度,请问怎么发送长度?多谢各位大侠相助 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-01-12 23:13 |只看该作者 |倒序浏览
socket通讯,服务器程序是c语言的。 客户端要用perl. 每次发送数据时,先发送4字节的数据长度,服务器端会判断收到的长度是否为4字节。如果为4字节,则将其作为将要收取数据包的长度。那么如果客户端要发送的包的长度为20,如何将这个长度发送出去,使服务器端收到4字节,并确定长度是20。

论坛徽章:
0
2 [报告]
发表于 2006-01-12 23:39 |只看该作者
syswrite即可

论坛徽章:
0
3 [报告]
发表于 2006-01-20 16:35 |只看该作者
send也可以

论坛徽章:
0
4 [报告]
发表于 2006-01-20 21:53 |只看该作者
$str="test abcdefg";
$len=length($str);
syswrite(SOCK,pack('L',$len)); ##发送模拟C中的Long Int的20,也即是0x14
syswrite(SOCK,pack('a'.$len,$str));  ##发送模拟C中的字符串,以null结尾

论坛徽章:
0
5 [报告]
发表于 2006-01-20 21:56 |只看该作者
有一个问题需要注意:不同的主机系统,字节的顺序不同,尤其是在小型机的RISC芯片、SPARC芯片、PA芯片和PC的X86的字节存储顺序刚好相反,一个是高位在前,一个是高位在后;
我刚开始写server的时候,就差点被折磨死了,aix端一读取字节就认为是一个天文大数

[ 本帖最后由 sunbeat 于 2006-1-20 23:40 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP