请问:用Winsock定时向20多个终端发送数据,工作一段时间后Winsock会停机,求教

请教:用Winsock定时向20多个终端发送数据,工作一段时间后Winsock会停机,求教。程序代码如下:Timer1 控件设

请教:用Winsock定时向20多个终端发送数据,工作一段时间后Winsock会停机,求教。
程序代码如下:

Timer1 控件设定间隔为 10 秒。


Private Sub Timer1_Timer()

  。。。。。。。。。。
  '从数据库读取数据
  。。。。。。。。。。
  ,拼装数据
  。。。。。。。。。。

  Debug.Pring 拼装好的数据 & Now() '程序运行到这里时正常的。


  Dim wskTemp As Winsock
   
  For Each wskTemp In Me.Winsock1
   
  If wskTemp.State = sckConnected Then
   
  wskTemp.SendData "待发送的数据" & "▲" & "待发送的数据"
   
  End If
   
  Debug.Pring "待发送的数据" & "▲" & "待发送的数据" & Now() '程序开始很正常,但工作大约十几个小时后这段代码就不再执行,也不向外发送数据了。程序的 Timer1 间隔工作还是正常的,但程序运行变得有些慢。

  Next

  Set wskTemp = Nothing
   
  。。。。。。。。。。。

  。。。。。。。。。。。

End Sub

操作系统 Windows Server2003,数据库 SQL2008。

程序开始工作正常,十几个小时后程序仍在运行,但不再向外发送数据,查看系统进程和内存使用情况,没有发现异常。

请教各位,我的问题出在哪里?是否要定时清空发送缓冲区,如何清空呢?谢谢!

[解决办法]
Dim wskTemp As Winsock
提到窗体声明部分.
Set wskTemp = Nothing
放到窗体退出结束部分.

[解决办法]
我觉得没那么简单
[解决办法]
没办法,你的对象都没销毁,你可以用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的生成与销毁过程。

[解决办法]
循环中没有任何停顿地发送数据,非常容易引起事件的嵌套。
建议加入等待,等一个终端的发送成功或失败后再循环下一个。
[解决办法]
我也正在写一个网络版工具,不过我的模式跟你的有点不一样,我的模式是“1个管理端->N个服务端->N个客户端”的模式,即我需要把服务端放到N多不同的服务器上,通过外网映射端口后,我可以用管理端反向连接,同时每个服务端支持最大一千个客户端连接,也有考虑到服务端winsock的工作模式,目前我的直接办法是在窗体上画一个Winsock1(0),然后用for来Load Winsock1(n),我的Load对象个数是下标最大为1002,其中0用来侦听客户端连接,1001用来在1-1000全部都连接后用来应答客户端连接已满。1002则是等待管理端的连接。不知道各位对我这想法有何高见?
[解决办法]
我觉得没那么简单
[解决办法]
State 属性(Winsock 控件)


返回控件的状态,用枚举类型来表示。在设计时是只读的,而且是不可用的。

语法

object.State

object 所在处代表一个对象表达式,其值是“应用于”列表中的对象。

数据类型

Integer

设置值

State 属性的设置值是:

常数 值 描述 
sckClosed 0 缺省的。关闭 
sckOpen 1 打开 
sckListening 2 侦听 
sckConnectionPending 3 连接挂起 
sckResolvingHost 4 识别主机 
sckHostResolved 5 已识别主机 
sckConnecting 6 正在连接 
sckConnected 7 已连接 
sckClosing 8 同级人员正在关闭连接 
sckError 9 错误 


[解决办法]
SendComplete 事件


在完成一个发送操作时出现。

语法

object_SendComplete

object 所在处代表一个对象表达式,其值是“应用于”列表中的对象。

参数

None


SendProgress 事件


在发送数据期间出现。

语法

object_SendProgress (bytesSent As Long, bytesRemaining As Long)

SendProgress 事件的语法包含下面部分:

部分 描述 
object 对象表达式,其值是“应用于”列表中的对象。 
bytesSent 从上次激活事件以来已发送的字节数。 
bytesRemaining 在发送缓冲区等待发送时的字节数。