客户端程序:
Option Explicit
Private Sub Command1_Click()
Winsock1.Connect
Label2.Caption = Winsock1.RemoteHost   'lebel2用来显示远程IP
Label4.Caption = Winsock1.State & "正在请求连接"    'label4用来显示连接状态
End Sub
Private Sub Command2_Click()
Winsock1.Close
End SubPrivate Sub Winsock1_Close()
Label4.Caption = Winsock1.State & "关闭连接"   '响应close 方法,显示连接状态
Label2.Caption = ""
End SubPrivate Sub Winsock1_Connect()
Label2.Caption = "连接到" & Winsock1.RemoteHostIP
Label4.Caption = Winsock1.State & "已经连接"
End Sub
服务器端程序:Option Explicit
Private Sub Form_Load()
Winsock1.Listen
Label2.Caption = "": Label4.Caption = "": Label6.Caption = ""    'label2用来显示远程IP
End Sub
Private Sub Winsock1_Close()         '响应关闭
Winsock1.Close
Label2.Caption = "": Label4.Caption = Winsock1.State & "连接关闭": Label6.Caption = ""
Winsock1.Listen           'label4用来显示连接状态,label6用来显示连接标识
End SubPrivate Sub Winsock1_Connect()
Label4.Caption = "已经建立连接"
End SubPrivate Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
If Winsock1.State <> sckClosed Then Winsock1.Close
Winsock1.Accept requestID
Label6.Caption = requestID
Label2.Caption = Winsock1.RemoteHostIP
Label4.Caption = Winsock1.State & "正在建立连接"
End Sub问题:1,运行后服务器端winsock根本不响应connect事件
     2,同时客户端还不响应close方法
     3,现在这个程序是从以前客户端winsock1.senddata 发送一个字符串,服务器端 getdata判断以
       后,调用winsock1.close方法而来的.但是以前的那个方法,是客户端响应close事件,服务器不
       响应close事件!两种情况刚好相反.
有点多,麻烦各位兄弟帮忙,谢谢了!

解决方案 »

  1.   

    问题:1,运行后服务器端winsock根本不响应connect事件
    首先要确定的是你的连接协议,如果的tcp 协议的话
    客户端在连接后会触发connect事件
    尔服务器触发的是  ConnectionRequest 事件
    任何1方调用close事件时并不是本身触发close事件 而是对方触发
    就是说服务器 close 触发客户端的 close事件
    客户端正好相反
      

  2.   

    1,我使用的是tcp协议,那么说服务器端接连建立完成也不出发connect事件了吗?
    2,我在客户端,服务器端都使用了close,应该都触发close事件,难道还是有先后顺序
    楼上的谢谢你了!
      

  3.   

    //任何1方调用close事件时并不是本身触发close事件 而是对方触发
    就是说服务器 close 触发客户端的 close事件
    客户端正好相反
    1方close后,另外1方不会触发,因为已经关闭了怎么触发close
    具体谁出发要看谁先执行
      

  4.   

    1见 zyg0(影子(努力吃饭中)) 
    2.3. close 事件其实应该理解为: 对方关闭连接的事件 
    连接的一方调用了close方法 另一方会出现这个事件
    看了你的程序 是客户端主动关闭连接的所以  客户端还不响应close事件 而是由服务端响应另外你这样改一试试
    Private Sub Winsock1_Close()         '响应关闭
    if winsock1.state<>sckclosed then
        Winsock1.Close '关闭前先检测下是否已经关闭,否则winsock会变的不灵了
    end if
    Label2.Caption = "": Label4.Caption = Winsock1.State & "连接关闭": Label6.Caption = ""
    Winsock1.Listen           'label4用来显示连接状态,label6用来显示连接标识
    End Sub
      

  5.   

    楼上的谢谢你们了!兄弟我还有点小问题!这里说着不方面,看你们都是对WINSOCK很熟悉的,能知道你们的QQ吗?如果不麻烦请加我或者留QQ,我的132646844