即我机器上有两块网卡,有两个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

解决方案 »

  1.   

    希望大家给点意见啊!!!
    又在网上一通猛搜,没有明确的信息,但看到一些方法,又做了一些尝试
    (1) 代理服务器法
        其中一块网卡的IP设为代理服务器(用ccproxy)
      设法让程序通过代理服务器运行(用SocksCap)
      程序运行后,发现冲突依旧,从交换机灯状态看,通讯依旧从默认的第一块网卡进行.也许尝试时细节设置有错误,总之测试没有成功.
    (2) bind.exe
        bind.exe从网上下载,作者不详.作用是,指定应用程序使用某块网卡工作.
      被我办公电脑的Windows判定为危险程序强行拦截.一时没能够进行测试.即使能用,也不认为这是个好办法
      

  2.   

    问题解决了.用APIapi_bind(SHandle, SockAddr, LenB(SockAddr))SHandle是使用Socket函数创建好的套接字,SockAddr指向描述通信对象的结构体的指针,LenB(SockAddr)是该结构的长度。
    虽然实现了,但是要放弃掉WINSOCK控件,用API重写通讯代码了.没找到更方便的方法,
    大家还有好建议吗?
    听听大家的看法再结贴.