客户端程序:
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事件!两种情况刚好相反.
有点多,麻烦各位兄弟帮忙,谢谢了!
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事件!两种情况刚好相反.
有点多,麻烦各位兄弟帮忙,谢谢了!
首先要确定的是你的连接协议,如果的tcp 协议的话
客户端在连接后会触发connect事件
尔服务器触发的是 ConnectionRequest 事件
任何1方调用close事件时并不是本身触发close事件 而是对方触发
就是说服务器 close 触发客户端的 close事件
客户端正好相反
2,我在客户端,服务器端都使用了close,应该都触发close事件,难道还是有先后顺序
楼上的谢谢你了!
就是说服务器 close 触发客户端的 close事件
客户端正好相反
1方close后,另外1方不会触发,因为已经关闭了怎么触发close
具体谁出发要看谁先执行
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