中易网

perl中关于socket通信 感谢

答案:2  悬赏:10  
解决时间 2021-04-10 07:18
perl中关于socket通信,connect建立连接后,给远程服务send发一消息后,远程服务会返回一消息,此时读取此消息,用<>,或recv读取后存入一变量,但始终不能读取完整,消息较长。使用循环,因不知如何控制跳出,始终得不到全部结果,请各位高手帮帮忙,给出一实际的方案。本人经验不足,拜托各位。 主要是实际中如果要接收的消息比较长的时候用<>接收或者指定长度接收,一条命令直接接收始终不能得到完整的,不完整的消息最后都被自动加了\n结束,故此使用了循环。我现在用循环解决了,测试消息最后的结束符来中断的。我试了一下sysread,不知为何,我的就不行。
最佳答案
我刚发现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是收到的字节长度
全部回答
我记得应该有个缓冲区来存放收到的 数据,可以判断那个缓冲区是不是为空来读你收到的数据。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
三高 什么症状
海口最好的西点培训学校是哪个
马云最近怎么消停了呢
图们市人民医院-孕产妇急救中心在哪里啊,我
请问水泥要加入什么能使它干后保持较深的颜色
女友送男友什么生日礼物好呢?这个男生喜欢可
歌词里有如果地球就让时间停在那一瞬间是什么
cf闪退修复
iphone6s开机但是黑屏怎么办
梦想缘大酒店地址在什么地方,想过去办事
我想做室内设计师,选文科还是理科,大学学什
喝了椰子汁发现里面有虫.这虫子会不会寄生于
煤矿后续五项工作的内容是指什么
近期好看的韩国综艺
乐游旅游行知路营业部在哪里啊,我有事要去这
推荐资讯
华硕r417在百度打不了文字?
乳晕漂红失败了,用激光去掉的话,红的地方会
地下城升到65升70级要多久
我有一个学生,经常没有原因的不来上学,怎么
我的vray没有阴影设置,重新下了好几个vray也
东方时尚驾校模拟训练怎么预约?
魔兽世界山狗之魂盗贼怎么获得
为什么说英国资产阶级革命是英国历史的转折点
乐高NXT手机蓝牙连接软件怎么下载?
我报名2016年征兵,发现我身份证已经报上了。
QQ逍遥剑仙怎么全屏
现在的首饰黄金价格多少啊
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?