本帖最后由 Blackduck 于 2010-09-09 21:03:43 编辑

解决方案 »

  1.   

    Dim wskTemp As Winsock
    提到窗体声明部分.
    Set wskTemp = Nothing
    放到窗体退出结束部分.
      

  2.   

    谢谢 theforever,细细想很有道理,不停的声明一个对象、销毁一个对象,估计系统受不了了,呵呵。回头改程序试一试。
      

  3.   

    没办法,你的对象都没销毁,你可以用netstat -na 看一下程序到底占用了多少PORT。
      

  4.   

    应该与你这段代码无关Dim wskTemp As Winsock
        
      For Each wskTemp In Me.Winsock1
        
      If wskTemp.State = sckConnected Then
        
      wskTemp.SendData "待发送的数据" & "▲" & "待发送的数据"
        
      End If事实上,这段代码并没有NEW新的对象出来,你后行那一行set wskTemp=nothing也完全是多余的。
    你应该在其它地方检查原因
      

  5.   

    查看PC内在占用情况,查看winsock的生成与销毁过程。
      

  6.   

    谢谢各位的回复,的确如5 楼 lorl2讲的,“set wskTemp=nothing也完全是多余”,正如4楼的 ACMAIN_CHM 所说,对象并没有销毁,用netstat -na 看一下程序,一段时间后,每个连接都占用了大量PORT,但在进程管理中系统内存以及CPU占用都不大,其它两个服务器端程序未受影响。我想,我现在需要的是如何在程序运行中,在不间断发送数据的时候控制连接时对PORT的大量占用,以及及时销毁对象,请大家给我一个方法吧,不然,每天上班第一件事情就是要重启一遍程序。再次谢谢!
      

  7.   

    我也正在写一个网络版工具,不过我的模式跟你的有点不一样,我的模式是“1个管理端->N个服务端->N个客户端”的模式,即我需要把服务端放到N多不同的服务器上,通过外网映射端口后,我可以用管理端反向连接,同时每个服务端支持最大一千个客户端连接,也有考虑到服务端winsock的工作模式,目前我的直接办法是在窗体上画一个Winsock1(0),然后用for来Load Winsock1(n),我的Load对象个数是下标最大为1002,其中0用来侦听客户端连接,1001用来在1-1000全部都连接后用来应答客户端连接已满。1002则是等待管理端的连接。不知道各位对我这想法有何高见?
      

  8.   

    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 错误 
      

  9.   

    SendComplete 事件
          在完成一个发送操作时出现。语法object_SendCompleteobject 所在处代表一个对象表达式,其值是“应用于”列表中的对象。参数None
    SendProgress 事件
          在发送数据期间出现。语法object_SendProgress (bytesSent As Long, bytesRemaining As Long)SendProgress 事件的语法包含下面部分:部分 描述 
    object 对象表达式,其值是“应用于”列表中的对象。 
    bytesSent 从上次激活事件以来已发送的字节数。 
    bytesRemaining 在发送缓冲区等待发送时的字节数。