perl中关于socket通信 感谢

perl中关于socket通信,connect建立连接后,给远程服务send发一消息后,远程服务会返回一消息,此时读取此消息,用<>,或recv读取后存入一变量,但始终不... perl中关于socket通信,connect建立连接后,给远程服务send发一消息后,远程服务会返回一消息,此时读取此消息,用<>,或recv读取后存入一变量,但始终不能读取完整,消息较长。使用循环,因不知如何控制跳出,始终得不到全部结果,请各位高手帮帮忙,给出一实际的方案。本人经验不足,拜托各位。
主要是实际中如果要接收的消息比较长的时候用<>接收或者指定长度接收,一条命令直接接收始终不能得到完整的,不完整的消息最后都被自动加了\n结束,故此使用了循环。我现在用循环解决了,测试消息最后的结束符来中断的。我试了一下sysread,不知为何,我的就不行。
展开
 我来答
izah
2010-12-16 · TA获得超过1140个赞
知道小有建树答主
回答量:425
采纳率:0%
帮助的人:388万
展开全部
我刚发现sysread在TCP中极其好用
语法:sysread (SOCKET_HANDLE, $buff, $length)
这玩意儿可以自动判断字符串长度,你只要给$length设置得比要传输的字符串长就好了,不需要加\n,也不需要指定准确的长度,这个$length是最大长度,读取时如果有超出部分,超出的会留在缓冲里等待下一次被读。
这个方法不会受到\n干扰,也不需要准确长度,它可以自行判断,应该是用的比较低层的方法实现的。
——因为刚听人说TCP的话sysread好用,UDP的话recv好用,我试了一下sysread,果然好用,UDP不会玩,你需要的话自己试试吧,哈哈哈哈

消息较长……那他也得有个长度吧?比如1KB?100KB?10MB?你只要定的比它发的长就好啦!

对了补充一下,上述sysread语法中的$buff是读到的值,如果你用$var=sysread(socket_handle, $buff, $length)来读,$var是收到的字节长度
大黑永远9号
2010-12-18
知道答主
回答量:3
采纳率:0%
帮助的人:0
展开全部
我记得应该有个缓冲区来存放收到的 数据,可以判断那个缓冲区是不是为空来读你收到的数据。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式