由于设备是冗余的,程序需要对本机器的两块网卡操作。

解决方案 »

  1.   

    oyljerry(☆勇敢的心☆) :
    具体说说。
      

  2.   

    根据IP用,或者根据网卡的name来使用
      

  3.   

    刚才做了一下测试,
    总结如下
    1.INADDR_ANY能够识别应该用那个网卡发送才会成功,但是两个网络同属以太网的话,它会选择一个比较后面的网卡,也就是最后启动的网卡.
    2.bind地址,在sendto中好像没有什么作用,在send中可以有实现效果,前提是用raw socket.所以建议用启动先后的办法来处理两个不同网卡,不过一般情况下用INADDR_ANY都可以了,
    微软的高度封装开发接口,使网络开发在windows下特别困难,这个大家是知道的,例如raw socket 的种种限制,和内核驱动TDI的RAWIP限制基本上扼杀了纯网络层的开发,前段时候看SPI也发现没有钥匙的大门,那就是微软~~~~~~
    汗ing
      

  4.   

    给你一段代码:遍历所有网卡的IP,很实用
    void GetAdapterIPList(CStringArray *arIP)
    {
    WSAData wa;
    int nRlt = WSAStartup(MAKEWORD(2,0),&wa);
    if(nRlt != 0)
    {
    AfxMessageBox("Ws2_32.dll初始化失败!\n");
    return ;
    } char     Hostname[100];
    ZeroMemory(Hostname,100);
    HOSTENT *pHostEnt;
    int      nAdapter = 0;

    gethostname( Hostname, 100);
    pHostEnt = gethostbyname( Hostname );
    while ( pHostEnt->h_addr_list[nAdapter] )
    {
    CString str1,strIP;
    for(int i=0;i<4;i++)
    {
    if(i>0)
    strIP+=".";
    str1.Format("%i",(int)((unsigned char*)pHostEnt->h_addr_list[nAdapter])[i]);
    strIP+=str1;
    }

    TRACE("ip:%s\n",strIP); arIP->Add(strIP); nAdapter++;

    WSACleanup( );
    }