| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2837 人关注过本帖
标题:VFP socket 接收超过10000个字符的数据会出现数据不全的现像,导致数据不全
取消只看楼主 加入收藏
laibinhua
Rank: 2
等 级:论坛游民
威 望:1
帖 子:283
专家分:38
注 册:2010-12-23
结帖率:58.97%
收藏
已结贴  问题点数:18 回复次数:4 
VFP socket 接收超过10000个字符的数据会出现数据不全的现像,导致数据不全
VFP socket 接收超过10000个字符的数据会出现数据不全的现像,导致数据不全,有时全,有是不全!有什么好办法解决吗?
DataArrival:
*** ActiveX Control Event ***
LPARAMETERS BytesTotal
LOCAL lcBuffer
lcBuffer=SPACE(BytesTotal)

**获得所接收到的数据
This.object.GetData(@lcBuffer)
Thisform.pf1.p1.txtOutput1.Value = lcBuffer

[此贴子已经被作者于2019-9-23 17:24编辑过]

搜索更多相关主题的帖子: socket VFP 数据 出现 接收 
2019-09-23 15:44
laibinhua
Rank: 2
等 级:论坛游民
威 望:1
帖 子:283
专家分:38
注 册:2010-12-23
收藏
得分:0 
回复 楼主 laibinhua
网上找了下资料 是winsock控件默认缓冲区的问题。如果大于8k也会传。 不过对方会收到几个数据到达事件 8*1024 超过后有办法处理吗?
2019-09-23 21:19
laibinhua
Rank: 2
等 级:论坛游民
威 望:1
帖 子:283
专家分:38
注 册:2010-12-23
收藏
得分:0 
回复 3楼 吹水佬
谢谢你的回复,代码如下:用的是winsock组件,数据包格式见附件,超过8K大小的字符串
winsock做成类它的dataArrival事件如下:
*** ActiveX Control Event ***
LPARAMETERS bytestotal
lcData=SPACE(bytestotal)
this.object.getData(@lcData)
thisform.when_receive_data(this.Parent.Name,lcData)

把类放入表单,表单的 when_receive_data事件如下:
LPARAMETERS tcWinsockName,tcData
thisform.pf1.p1.txtOutput1.Value =tcData  &&取到数据

上面就是主要的代码,数据不超过8K时,接收正常,超过时就经常不完整
test4.rar (1.22 KB)
2019-09-24 09:15
laibinhua
Rank: 2
等 级:论坛游民
威 望:1
帖 子:283
专家分:38
注 册:2010-12-23
收藏
得分:0 
回复 4楼 laibinhua
原因找到了,其实是SOCKET 客户端发过来的字符超过8K时自动拆分成多个包了,SOCKET服务端分批收取了数据,只是不知道如何拼包合并包,老师有什么办法合并包吗?
2019-09-24 14:16
laibinhua
Rank: 2
等 级:论坛游民
威 望:1
帖 子:283
专家分:38
注 册:2010-12-23
收藏
得分:0 
回复 6楼 吹水佬
谢谢 你的回复!已解决了!DataArrival事件中本身可以自动分段接收数据,只要在这里面加个数据完整性的检查,如果数据不完整就把接到的字符做拼接,如果数据全了就跳出这个事件,执行一个自定义的事件!
2019-09-25 15:51
快速回复:VFP socket 接收超过10000个字符的数据会出现数据不全的现像,导致数据 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016206 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved