请教:用Winsock定时向20多个终端发送数据,工作一段时间后Winsock会停机,求教。 本帖最后由 Blackduck 于 2010-09-09 21:03:43 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Dim wskTemp As Winsock提到窗体声明部分.Set wskTemp = Nothing放到窗体退出结束部分. 谢谢 theforever,细细想很有道理,不停的声明一个对象、销毁一个对象,估计系统受不了了,呵呵。回头改程序试一试。 没办法,你的对象都没销毁,你可以用netstat -na 看一下程序到底占用了多少PORT。 应该与你这段代码无关Dim wskTemp As Winsock For Each wskTemp In Me.Winsock1 If wskTemp.State = sckConnected Then wskTemp.SendData "待发送的数据" & "▲" & "待发送的数据" End If事实上,这段代码并没有NEW新的对象出来,你后行那一行set wskTemp=nothing也完全是多余的。你应该在其它地方检查原因 查看PC内在占用情况,查看winsock的生成与销毁过程。 谢谢各位的回复,的确如5 楼 lorl2讲的,“set wskTemp=nothing也完全是多余”,正如4楼的 ACMAIN_CHM 所说,对象并没有销毁,用netstat -na 看一下程序,一段时间后,每个连接都占用了大量PORT,但在进程管理中系统内存以及CPU占用都不大,其它两个服务器端程序未受影响。我想,我现在需要的是如何在程序运行中,在不间断发送数据的时候控制连接时对PORT的大量占用,以及及时销毁对象,请大家给我一个方法吧,不然,每天上班第一件事情就是要重启一遍程序。再次谢谢! 我也正在写一个网络版工具,不过我的模式跟你的有点不一样,我的模式是“1个管理端->N个服务端->N个客户端”的模式,即我需要把服务端放到N多不同的服务器上,通过外网映射端口后,我可以用管理端反向连接,同时每个服务端支持最大一千个客户端连接,也有考虑到服务端winsock的工作模式,目前我的直接办法是在窗体上画一个Winsock1(0),然后用for来Load Winsock1(n),我的Load对象个数是下标最大为1002,其中0用来侦听客户端连接,1001用来在1-1000全部都连接后用来应答客户端连接已满。1002则是等待管理端的连接。不知道各位对我这想法有何高见? State 属性(Winsock 控件) 返回控件的状态,用枚举类型来表示。在设计时是只读的,而且是不可用的。语法object.Stateobject 所在处代表一个对象表达式,其值是“应用于”列表中的对象。数据类型Integer设置值State 属性的设置值是:常数 值 描述 sckClosed 0 缺省的。关闭 sckOpen 1 打开 sckListening 2 侦听 sckConnectionPending 3 连接挂起 sckResolvingHost 4 识别主机 sckHostResolved 5 已识别主机 sckConnecting 6 正在连接 sckConnected 7 已连接 sckClosing 8 同级人员正在关闭连接 sckError 9 错误 SendComplete 事件 在完成一个发送操作时出现。语法object_SendCompleteobject 所在处代表一个对象表达式,其值是“应用于”列表中的对象。参数NoneSendProgress 事件 在发送数据期间出现。语法object_SendProgress (bytesSent As Long, bytesRemaining As Long)SendProgress 事件的语法包含下面部分:部分 描述 object 对象表达式,其值是“应用于”列表中的对象。 bytesSent 从上次激活事件以来已发送的字节数。 bytesRemaining 在发送缓冲区等待发送时的字节数。 VB如何判断一个控件是否文本框 求FTP的上传而且有进度条的源程序 高手:Word 中这样的代码如何实现(无法通过录制宏得到) 找有丰富工作经验的vb程序员 ado访问sql2000数据库不用升级mdac的方法 如何在数据库中取得ID(自动编号) 关于错误处理 如何用VB做一程序的密码对话框?????????????? 我有两个的问题: 请教关于鼠标事件的问题 关于MDI子窗体显示的问题 触发器可以用来做什么工作
提到窗体声明部分.
Set wskTemp = Nothing
放到窗体退出结束部分.
For Each wskTemp In Me.Winsock1
If wskTemp.State = sckConnected Then
wskTemp.SendData "待发送的数据" & "▲" & "待发送的数据"
End If事实上,这段代码并没有NEW新的对象出来,你后行那一行set wskTemp=nothing也完全是多余的。
你应该在其它地方检查原因
返回控件的状态,用枚举类型来表示。在设计时是只读的,而且是不可用的。语法object.Stateobject 所在处代表一个对象表达式,其值是“应用于”列表中的对象。数据类型Integer设置值State 属性的设置值是:常数 值 描述
sckClosed 0 缺省的。关闭
sckOpen 1 打开
sckListening 2 侦听
sckConnectionPending 3 连接挂起
sckResolvingHost 4 识别主机
sckHostResolved 5 已识别主机
sckConnecting 6 正在连接
sckConnected 7 已连接
sckClosing 8 同级人员正在关闭连接
sckError 9 错误
在完成一个发送操作时出现。语法object_SendCompleteobject 所在处代表一个对象表达式,其值是“应用于”列表中的对象。参数None
SendProgress 事件
在发送数据期间出现。语法object_SendProgress (bytesSent As Long, bytesRemaining As Long)SendProgress 事件的语法包含下面部分:部分 描述
object 对象表达式,其值是“应用于”列表中的对象。
bytesSent 从上次激活事件以来已发送的字节数。
bytesRemaining 在发送缓冲区等待发送时的字节数。