Private Sub WS1_ConnectionRequest(ByVal requestID As Long)
    If WS1.State <> sckClosed Then WS1.Close
     WS1.LocalPort = 0
     WS1.Accept requestID
  end sub
上面这一段是在winsock服务端接受连接时的代码,我想知道 为什么 要添加这么一句话:
 
 If WS1.State <> sckClosed Then WS1.Closews1.state 如果是 sckclosed 那么说明对方网络关闭,这里为什么在确定网络未关闭的情况下要让 ws1 close呢?
  然后还有 后面把localport设置成了0
 是不是winsock在建立连接时要初始化呢?建立了连接后原来设定的就没用了?
初次用winsock 还请多指教!谢谢
 

解决方案 »

  1.   

    因为你用侦听控件和连接控件用的是同一个WS1已经打开侦听了,不关闭是无法再建立连接的,所以要先关闭
    WS1.LocalPort = 0 这句倒是可有可无的
      

  2.   

    哦,也就是说,如果是在两个程序中,用两个控件进行连接是不是可以直接用
    WS1.Accept requestID 
    就可以呢?
      

  3.   

    就像记录集一样,重新打开之前要先判断是否已经打开了,已经打开就要先关闭
    if rs.state=1 then rs.close
      

  4.   

    同一台机器上的winsock,就算是用在不同的程序中,它也是默认一个吗?
      

  5.   

    一般是这样的,服务端打开侦听,客户端发送连接请求,服务端关闭侦听(1对1SOCK连接时)WS1.Accept requestID用这个确认与客户端连接
    这样才算连接完成
      

  6.   

    问个局外事情:  public sub install(a as Form)
       
          a.text1.text=""
      end sub
    这样为了通用想定义一个窗体变量,但为什么不行呢?
      

  7.   

    这种方式定义的只是窗体,其内部的控件是不能这样定义的
    a.text1.text="" 这个窗体是没有这个属性的
      

  8.   

      public sub install(a as Form) 
          'a 表示可引用你传入的窗体.
          '而下一句,只有当你传入的窗体中有一个Text1的控件或类,而且此控件或类有Text属性才不会出现错误.
          a.text1.text="" 
      end sub 比如说:
    你现在有一个窗体 From2 里面有一个Text1的文本框.你调用.install from2后.你会发现 from2中的text1文本框里面的内容为空了.