作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发旧版 VB6 应用程序。该应用程序使用 RAS API 建立调制解调器连接,然后使用 winsock 控件连接到 IP 地址和端口。
我现在正在向这个应用程序添加一个“故障转移”功能,如果它无法连接到服务器,它会尝试连接到列表中的下一个。
假设我有两台服务器,服务器应用程序 A 和服务器应用程序 B。(在测试期间,我交换了这些服务器以验证两台服务器都可以访问并且没有路由/防火墙问题。)
如果我停止服务器应用程序 A,那么当应用程序尝试连接到服务器应用程序 A 和服务器应用程序 B 时,会发生一些非常奇怪的事情:
mySocket.close
mySocket.Connect serverA, portA
mySocket.close
mySocket.Connect serverB, portB
socket.connect ip, port
socket.close
socket.connect newIP, newPort
Private Sub closeSocket(ByRef w As Winsock)
w.Close
Do While (w.State <> sckClosed)
DoEvents
Loop
End Sub
最佳答案
再次查看项目后发现,以前的开发人员将 winsock 控件的 LocalPort 属性设置为非零值。这阻止了winsock控件的重用。
将此设置为零会导致选择一个随机的本地端口,从而允许重用控件。
经验教训:处理 VB6 时,我需要查看属性设置以及源代码。
关于VB6 winsock控制: closing a connection and connecting to another server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6356010/
我是一名优秀的程序员,十分优秀!