在开发TCP客户端程序时,通常客户端是不需要关心自己的地址信息的,只需要指定服务器的IP地址和端口就可以了。以前都是在只有一个网口的机器上开发,所以也出现过什么问题。今天遇到一个情况,机器上有两个网口A和B,每个网口都有自己的IP,我现在想知道,如果我就想用A网口与服务器通讯,那我该怎么操作啊?

解决方案 »

  1.   

    客户端也需要bind吗?不是connect连接成功后直接send或recv就可以了吗?
      

  2.   

    bind是指定端口通讯,不bind就是系统自己选个未被使用的端口来通讯.
      

  3.   

    我刚才试了一下,我的两个网口,一个插了网线,一个没插。如果我在调用connect()前调用bind()绑定到那个没插网线的网口上,bind返回失败,如果绑定到插了网线的那个网口上,bind成功。看来无论是服务器还是客户端,在正式通讯前都可以调用bind将套接字绑定到指定的IP上。
      

  4.   

    还是自己处理比较好吧,如果没有网络连接的可以过滤掉这个ip,这样比较好。
    //如果机器上有两个网口,其中一个接了网线,另一个没接,而且用户没有手动执行bind的操作,我想操作系统会自动绑定到可用的那个端口上吧。我刚才测试了一下,每次都是自动绑定到可用的那个网口上。
      

  5.   

    底层tdi nids上来的数据统统是要经过网络的,通地socket bind IP,=filter一次,socket内部如果Tdi IP == bind IP 则放行,否则直接通知底层扔掉,OYES就这么简单。