PB 调用WINSOCK接收数据GETDATA过大的问题

lixifan522 2016-08-18 12:06:04
我在跟一个仪器做单项通讯的时候用的是TCP/IP协议,他给我发单项数据,每次给我多个数据包发送的时候就显示我这边已经掉线了,
对方的给我的每个数据包都是31万字节的,用|分割,一共里面大概74条数据,我给存到整个的31万存到str_1里面了,
str_1我定义的是string型
当是run这个程序的时候,程序就卡死CPU占用率百分之百,我跟踪数据库的时候发现到63调就不插值(64条是一个3万多字节的数据),我把4和3都屏蔽后发现还是卡死,但是往mle_1里面显示数据的时候,是分批显示的,例如先显示20万,然后下拉滚动条就会向下,过半分钟又增加了11万,我又把MLE_1.TEXT=STR_1去掉还是卡死。

但是我DEBUG的时候还发现1、2、3、4步骤都不卡死
还有我有一个奇怪的地方,在GETDATA的时候数据是31万都过来的
但是我赋值到MLE_1里面的时候就会分批的显示,
1.请问数据是分批次过来的吗?
2.我就不理解为什么接收每一条的时候都那么慢,是因为数据还没发送过来,在等数据吗,特别是到64条的时候,需要等半天?
3.还有就是对方仪器发送多个数据包的时候我为什么会掉线?
我就觉得他给我发的数据包太大了,才导致和卡死和掉线的,具体是什么原理哪位高人给我讲讲?

我的全部家当66分已经献上,静待高人。


附简易代码:
在ARRIV函数下
string str_1
//1.接收数据
winsock.getdata(str_1)
mle_1.text = str_1
//2.发送密码给对方WINSOCK
winsock,sendata(‘’)
//3.截取字符串

//4.把获取的包存到数据库里
insert 插入数据


...全文
1144 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
呵,寂寞~� 2020-05-10
  • 打赏
  • 举报
回复
大佬 我想问下 PB 调用WINSOCK再调用外部函数getdata出错 可能是什么原因啊,是缺少某个动态库么? 请教下
WorldMobile 2016-09-12
  • 打赏
  • 举报
回复
设置缓存大小,然后循环接收,这样就不会卡死了
qq_35830025 2016-08-24
  • 打赏
  • 举报
回复
你好我现在也在用 winsock.ocx , 用于接收十六进制指令,现在碰到问题,请求帮助 我的Q29924331
nocry115 2016-08-19
  • 打赏
  • 举报
回复
1、能否用标准ZIP压缩一下再存数据库?用的时候再解压。(如zlib.dll) 2、winsock.getdata(str_1)的语法有问题,应该用: winsock.getdata(ref str_1) //注意参数前要加ref //有时可以用this.object.getdata(ref str_1) 3、如果是getdata其后的代码造成延时,尝试都挪到自定义事件里,用Post event 调用 4、大文本插入数据库,是否可用大文本类型?insert一条记录后,用updateblob写入。
lixifan522 2016-08-18
  • 打赏
  • 举报
回复
引用 1 楼 zjhss1981 的回复:
循环接收,通过接收数据的最后位进行判断是否是截止符,如果是的话再结束循环。
请问如果这么高的数据量会不会造成阻塞
zjhss1981 2016-08-18
  • 打赏
  • 举报
回复
循环接收,通过接收数据的最后位进行判断是否是截止符,如果是的话再结束循环。

604

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 控件与界面
社区管理员
  • 控件与界面社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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