我之前做过SOCKET编程,但是我记得UDP通信,也就是数据报通信时,发送数据时并没有与网卡绑定,那在两个网卡的条件下,系统怎么知道到底是通过哪个网卡发送呢?
我对于两个网卡编通信程序没什么经验,麻烦各位多多指教,最好有实例!

解决方案 »

  1.   

    sendto的后两个参数不就有目的IP和端口么.
      

  2.   

    先调用sendto发送数据时是自动绑定的
      

  3.   

    根据目的地址,和本地的路由表
    在控制台下面敲入命令route print就可以看到路由表了。
    系统根据目的地址和路由表表项匹配,找到最匹配的就从那个接口出。
    没找到从默认路由出
      

  4.   

    我可能没有说清楚,我的情况是两个网卡连接这不同的网络,这两个网络物理隔离,而我床架CAsyncSocket对象时,应该将该对象与一个网卡绑定才对吧,否则等我调用sendto函数时,系统怎么知道这个CAsyncSocket对象的发送行为应该由哪个网卡来完成呢?
      

  5.   

    本帖最后由 VisualEleven 于 2010-12-06 10:10:54 编辑
      

  6.   

    SOCKET udp_sock = CreateUdpSocket();

    m_BindAddr.sin_family = AF_INET;
    //m_BindAddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
    m_BindAddr.sin_addr.s_addr  = inet_addr(bindIp);
    m_BindAddr.sin_port = htons(bindPort);

    nRet = bind(udp_sock, (LPSOCKADDR)&m_BindAddr, sizeof(SOCKADDR_IN));

    if(nRet == SOCKET_ERROR)
    {
    OnError(udp_sock, "Bind Socket Fail", GetLastError());
    closesocket(udp_sock);
    return false;
    }
    sendto(udp_sock, data, len, 0, .........
      

  7.   

    客户端绑定什么呀,客户端不是直接sendto到指定地址吗?
      

  8.   

    10楼的,你的意思是不是通过bind函数完成绑定?
      

  9.   

    创建socket的时候,系统会默认分配一个地址(即ip和端口)
    当你使用sendto的时候地址是目标地址(当然udp里也可以先connect,然后send)我刚好刚写了一些udp通信的,可以相互讨论哦
      

  10.   

    可行 我做的就是这个 每个网卡的IP不同 所以绑定到不同的IP后的SOCKET就不同。。
      

  11.   

    当你创建socket套接字以后,如果首先调用的是sendto(),则可以不调用bind来显式绑定本地地址,系统会自动为你绑定。
      

  12.   

    本帖最后由 VisualEleven 于 2010-12-06 10:11:15 编辑