VB6 winsock控制:关闭连接并连接到另一个服务器

| 我正在使用旧版VB6应用程序。该应用程序使用RAS API建立调制解调器连接,然后使用Winsock控件连接到IP地址和端口。 我现在正在向此应用添加“故障转移”功能,如果该应用无法连接到服务器,它将尝试连接到列表中的下一个服务器。 假设我有两台服务器,服务器应用程序A和服务器应用程序B。(在测试过程中,我交换了两台服务器,以验证两台服务器均可访问并且没有路由/防火墙问题。) 如果我停止服务器应用程序A,则当该应用程序尝试连接到服务器应用程序A然后再连接到服务器应用程序B时,会发生一些非常奇怪的事情:
mySocket.close
mySocket.Connect serverA, portA
mySocket.state = 6 sck连接 调用套接字连接事件 mySocket.state = 7秒 mySocket.state = 8 sck关闭 (这似乎有些奇怪:我不确定为什么它似乎会连接一会儿。) 套接字保持在sckClosing状态。几百毫秒后,我继续尝试连接到服务器B:
mySocket.close
mySocket.state = 0 sck关闭 。
mySocket.Connect serverB, portB
mySocket.state = 6 sck连接 套接字错误事件被调用,错误为10060(WSAETIMEDOUT) mySocket.state = 9 sckError 此时,如果我启动服务器应用程序A,执行RAShangup和RASdial,然后尝试连接到服务器A,则一切正常。 好像顺序
socket.connect ip, port
socket.close
socket.connect newIP, newPort
除非插入了RAShangup和RASdial,否则无法正常工作。相反,它会因WSAETIMEDOUT而失败。 在关闭和连接呼叫之间我需要做些什么吗? 注意:我已尝试确保close调用确实已关闭,但这无济于事:
Private Sub closeSocket(ByRef w As Winsock)
  w.Close
  Do While (w.State <> sckClosed)
    DoEvents
  Loop
End Sub
    
已邀请:
        再次查看该项目后,原来是以前的开发人员将winsock控件的LocalPort属性设置为非零值。这阻止了Winsock控件的重用。 将此设置为零会导致选择一个随机的本地端口,从而可以重用该控件。 经验教训:处理VB6时,我需要查看属性设置以及源代码。     
        关闭端口时,我注意到一些不稳定的行为。我无法一致地重新打开端口。解决方法:在关闭命令后添加DoEvents。     

要回复问题请先登录注册