有多个网卡,一台PC服务端,其他通过网卡和PC相连,所有IP相同.
只有本地的IP设置不同.这样如何通信?

解决方案 »

  1.   

    什么叫IP相同. 
    只有本地的IP设置不同?
    不明白
      

  2.   

    一声雷响 高手闪亮登场小case  setsockopt(sock, SOL_BINDTODEVICE, "eth0", ...);
      

  3.   

    客户端的IP全部相同,本地几个网卡IP设置的不同和这些客户端一一对应,客户端之间没有网络连接!
      

  4.   

    怎样用?能否详细说明下!Thanks!
      

  5.   


    怎样用?能否详细说明下!Thanks!
      

  6.   

    bind的时候SOCKADDR_IN sin_addr.s_addr = htonl(INADDR_ANY)表示绑定所有网卡吧
    客户端connect对应的服务端网卡IP
      

  7.   

    bind怎么会是绑定到网卡设备呢?你理解错误了,古人有云:bind相当于setsockname.int setsockopt(
      SOCKET s, //socket file descriptor
      int level, //SOL_SOCKET
      int optname, //SOL_BINDTODEVICE indicate bind to physical device
      const char FAR *optval,  //name of the device, eg. "eth0"
      int optlen //length of optval            
    );详情请见http://blog.chinaunix.net/u2/80953/showart_1670418.html
      

  8.   


    建议再将多个网卡的 mac 地址改成全部相同...
      

  9.   

    这位兄弟很坚持setsockopt(sock, SOL_BINDTODEVICE, "eth0", ...);啊服务端有多个网卡,每个网卡和客户机各自主组成一个网络,这个方案可行啊
    就算客户机的IP相同也没问题啊,全部客户机都不在同一网络
    再说同一机器的多个网卡MAC相同的话,会有冲突
    要和全部客户机通信,就要侦听服务端的全部网卡
    百度一下INADDR_ANY吧
      

  10.   

    bind到INADDR_ANY就行了,向外建立链路时,会根据本机的路由表找到合适的网卡出去的。
      

  11.   

    由内核选外出接口,想都不用想,内核肯定选primary interface,
      

  12.   


    服务端的网卡多个,可以有多个IP,只是客户端的IP都一样!
      

  13.   

    那就更不知道如果通信了,我本来想MAC地址不同,看看能不能通信!
      

  14.   

    楼上说的方法可以去试试,
    setsockopt(sock, SOL_BINDTODEVICE, "eth0", ...);
    第三个参数应该就是不同网卡接到以太网的序号
    如果IP不同的话系统会自动通过IP找网卡,这种情况应该可以自己设置,楼主为什么一直说不试试呢
      

  15.   

    setsockopt 这个函数用在哪儿? 麻烦能不能详细描述下,试了下 还是不行!
      

  16.   

    有多个网卡,一台PC服务端,其他通过网卡和PC相连,所有IP相同.
    只有本地的IP设置不同.这样如何通信? 所有IP相同,为什么要设样做?IP相同,在同一个LAN里会造成IP地址冲突。
    至于改MAC,不如改IP,呵呵。

      

  17.   

    引用 2 楼 Cat_Of_9Life 的回复:
    什么叫IP相同.
    只有本地的IP设置不同?
    不明白客户端的IP全部相同,本地几个网卡IP设置的不同和这些客户端一一对应,客户端之间没有网络连接!你们的client 连接 server,是各自独产开的吧?
    client不在同一个物理网络里就没问题了。
    在此前提下,用TCP/IP协议来能信好了。
      

  18.   

    up
    你服务器的网卡ip肯定不同吧,每个都绑定,accept就对应相应客户端的socket
    SOCKADDR_IN sin_addr.s_addr = htonl(ip1)
    bind
    acceptSOCKADDR_IN sin_addr.s_addr = htonl(ip2)
    bind
    acceptSOCKADDR_IN sin_addr.s_addr = htonl(ip3)
    bind
    accept
      

  19.   


    看来linux学的不错,你在windows下用你的代码绑定网卡看看