即我机器上有两块网卡,有两个ip,当建立socket的connect连接时(用Winsock),我希望控制是由哪个ip发出的连接,而不是由系统自动指定第一块 现有程序abc.exe 作为客户端建立连接发送数据,服务端为电子设备,收到后会响应客户端.运行正常.问题:
如果在同一台电脑,运行两个类似程序,相同连接目标(Winsock2.Connect 192.168.0.10, 502),则发生争抢,总有一个程序的connect会被断开.
尝试:
(1)在两个电脑上,同时运行程序,两个程序都正常运行.于是尝试:安装双网卡,让两个程序的connect从两个IP进行.看是否不冲突.
(1) winsock1.LocalIP 为只读,不可指定.
(2) winsock1.bind Localport, Localip 用于服务端,客户端不可用
(3) 查看winsock1.LocalIP,connect总是默认由的一块网卡的IP发出
(4) 禁用本地连接1,则connect由第二块网卡发出.恢复本地连接1,则connect恢复由第一块网卡发出那么,如何能够做到connect连接时,指定网卡(ip)呢?
或者做到让网络程序(exe),从某个网卡进行工作?或者工具?附:abc代码Private Sub WinsockIni()
Winsock1.Protocol = sckTCPProtocol
Winsock1.Close
Winsock1.Connect 192.168.0.10, 502
End SubPrivate Sub WinsockSend()
On Error GoTo ErrProc
Winsock1.SendData SendStr
ErrProc:
blnConnect = False
End SubPrivate Sub Form_Load()
Call WinsockIni()
End SubPrivate Sub Timer1_Timer()
If blnConnect = False Then
Call WinsockIni
End If
End Sub
如果在同一台电脑,运行两个类似程序,相同连接目标(Winsock2.Connect 192.168.0.10, 502),则发生争抢,总有一个程序的connect会被断开.
尝试:
(1)在两个电脑上,同时运行程序,两个程序都正常运行.于是尝试:安装双网卡,让两个程序的connect从两个IP进行.看是否不冲突.
(1) winsock1.LocalIP 为只读,不可指定.
(2) winsock1.bind Localport, Localip 用于服务端,客户端不可用
(3) 查看winsock1.LocalIP,connect总是默认由的一块网卡的IP发出
(4) 禁用本地连接1,则connect由第二块网卡发出.恢复本地连接1,则connect恢复由第一块网卡发出那么,如何能够做到connect连接时,指定网卡(ip)呢?
或者做到让网络程序(exe),从某个网卡进行工作?或者工具?附:abc代码Private Sub WinsockIni()
Winsock1.Protocol = sckTCPProtocol
Winsock1.Close
Winsock1.Connect 192.168.0.10, 502
End SubPrivate Sub WinsockSend()
On Error GoTo ErrProc
Winsock1.SendData SendStr
ErrProc:
blnConnect = False
End SubPrivate Sub Form_Load()
Call WinsockIni()
End SubPrivate Sub Timer1_Timer()
If blnConnect = False Then
Call WinsockIni
End If
End Sub
又在网上一通猛搜,没有明确的信息,但看到一些方法,又做了一些尝试
(1) 代理服务器法
其中一块网卡的IP设为代理服务器(用ccproxy)
设法让程序通过代理服务器运行(用SocksCap)
程序运行后,发现冲突依旧,从交换机灯状态看,通讯依旧从默认的第一块网卡进行.也许尝试时细节设置有错误,总之测试没有成功.
(2) bind.exe
bind.exe从网上下载,作者不详.作用是,指定应用程序使用某块网卡工作.
被我办公电脑的Windows判定为危险程序强行拦截.一时没能够进行测试.即使能用,也不认为这是个好办法
虽然实现了,但是要放弃掉WINSOCK控件,用API重写通讯代码了.没找到更方便的方法,
大家还有好建议吗?
听听大家的看法再结贴.