当前位置: 代码迷 >> PB >> udp内存有关问题
  详细解决方案

udp内存有关问题

热度:84   发布时间:2016-04-29 06:50:23.0
udp内存问题
1 开发了一个通讯工具,用的是udp协议,每次才传输完一个文件后,内存会不断增大,发送多少就增大多少,关闭socket后,内存无法释放。
2 为了找到问题,我们把所有的系统设置都取消,就剩下一个sendto(lb_blob,len(lb_blob),0,userver_ip,ii_port),lb_blob字段设置为1k,循环1000次后内存占用就涨近100M,然后关闭对话窗口(传输的套接字是在对话窗口声明的,跟主窗口无关),内存还是无法释放,只有关闭主窗口。
3 用的是winsocket.pbl
UDP 通信

------解决方案--------------------
不要用winsocket.pbl,直接winsock控件就行了

pb中建立一对一的连接的方法很简单,比方说吧: 
1、新建一个winsock的应用程序对象; 
2、新建窗口server,在server中添加winsock控件ole_winsck; 
3、新建窗口client,在client中也添加winsock控件ole_winsck; 
4、在server和client的winsock控件的事件中填写代码: 
在nectionrequest事件中写: 
if ole_winsck.object.state<>0 then 
ole_winsck.object.close() 
end if 
ole_winsck.object.accept(requestid) 
messagebox("",string(requestid)) 
在dataarrival事件中写: 
messagebox("提示","收到") 
5、在server的open事件中写代码: 
if isvalid(ole_winsck) = false then return -1 
ii_localport=2001 
//winsock通讯协议设为TCP协议 
ole_winsck.object.protocol=0 
//本地侦听的winsock通讯端口号 
ole_winsck.object.localport=20001// 
ole_winsck.object.listen() 
6、在client的open事件中写代码: 
if isvalid(ole_winsck) = false then return -1 
//winsock通讯协议设为TCP协议 
ole_winsck.object.protocol=0 
//server的ip地址 
ole_winsck.object.remotehost="132.113.64.202" 
//server的winsock通讯端口号 
ole_winsck.object.remoteport=20001 
ole_winsck.object.connect()

6、在server的机上首先运行server窗口,进行侦听; 
7、在client的机上运行client窗口进行连接; 
如果想发送数据的话,就分别在两个窗口上添加一个send按钮,在send按钮的click事件中添加代码: 
string as_data="好玩呀" 
if ole_winsck.object.state = 7 then 
ole_winsck.object.senddata(as_data) 
MessageBox("提示","通知通信控制系统成功!",Information!) 
return 1 
else 
MessageBox("警告","通知通信控制系统失败!",StopSign!) 
return -1 
end if

在SERVER 端收到一个accept()后,需打开一个 
新的WINSOCK事件(即需调用新的WINSCOK控件) 
成功后,该WINSCOK控件与CLIENT对话,原WINSCOK控件 
继续进行监听,如果有新的连接要求,则产生 
一个accept()后,又打开一个新的WINSOCK事件 
这样,就实现一个SERVER 端对多个CLIENT对话, 
也能实现CLIENT间对话(通过SERVER 端的转接)
------解决方案--------------------
试一下在socket 对象的方法 sendto (blob buf, integer len, integer flags, unsignedlong uladdr, integer iport) 的

iRet = s.wssendto(socknum,lb_blob,len,flags,ulAddr,iPort)

后写上: setnull(lb_blob)
  相关解决方案