windows下多网卡,socket如何进行指定网卡通讯

mnhwa 2021-01-18 10:10:58
在windows下进行c++编程,电脑具有多个网卡,想同时在每个网卡上起网络链接进行通信,如何实现,查找过名种帖子,都没发现可用方法,bind没有解决问题。
...全文
4010 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
mnhwa 2021-01-25
  • 打赏
  • 举报
回复
多谢楼上哥们儿远程调试,原来是因为虚拟网卡与真实网卡在使用上有很大的区别,直接使用bind就可以,但是不可以使用虚拟网卡测试,当时不想在工程机上装环境,浪费了时间
seaicansee 2021-01-22
  • 打赏
  • 举报
回复 1
多网卡编程时,如果想指定网卡,无论是在tcp客户端,还是在udp的发送方,使用bind函数,进行ip地址和端口的绑定,将想要使用的网卡上的地址,进行bind,这样在发包时就可以使用bind的地址进行发送。从而达到指定网卡发送的目的。亲测可用,忘采纳
zgl7903 2021-01-18
  • 打赏
  • 举报
回复
bind 可以

  struct hostent *ht = gethostbyname(NULL);
  for(int n=0; ht && ht->h_addr_list[n]; n++)
  {
    SOCKET s = socket(AF_INET, SOCK_STREAM, 0);

    sockaddr_in addr = {0};
    addr.sin_family = ht->h_addrtype;
    //Addresses are returned in network byte order.
    addr.sin_addr.s_addr = *(u_long *) ht->h_addr_list[n];
    //service provider assigns a unique port 
    addr.sin_port = htons(0);

    if(bind(s, (sockaddr*)&addr, sizeof(addr)) == SOCKET_ERROR)
    {
      DWORD dwErr = WSAGetLastError();
      ASSERT(0);
    }

    //connect
    //while(1) { send recv }
    
    closesocket(s);
  }

赵4老师 2021-01-18
  • 打赏
  • 举报
回复
再仔细研究研究bind?

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧