TCP中能不能只bind到某IP,让系统指定端口呢?

oldmtn 2014-09-03 09:50:53
RT,
一般我们TCP绑定的时候,都是绑定到一个端口,
代码如下:
        sockaddr_in addrLocal;
addrLocal.sin_addr.S_un.S_addr = dwIPAddrLocal;
addrLocal.sin_family = AF_INET;
addrLocal.sin_port = htons(wPortLocal);

iResult = bind(m_soClient, (struct sockaddr *) &addrLocal, sizeof(struct sockaddr_in));

但是现在有个需求,在本地有2块网卡的情况下,我希望只绑定到IP,不绑定到端口,怎么办?

因为,如果我不绑定的话,假如我想指定通过网卡1通信,但是很可能系统会将该SOCKET绑定到网卡2的一个端口,如何解决?
...全文
409 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
笨笨仔 2014-09-24
  • 打赏
  • 举报
回复
引用 楼主 oldmtn 的回复:
RT, 一般我们TCP绑定的时候,都是绑定到一个端口, 代码如下:
        sockaddr_in addrLocal;
        addrLocal.sin_addr.S_un.S_addr = dwIPAddrLocal;
        addrLocal.sin_family = AF_INET;
        addrLocal.sin_port = htons(wPortLocal);

iResult = bind(m_soClient, (struct sockaddr *) &addrLocal, sizeof(struct sockaddr_in));
但是现在有个需求,在本地有2块网卡的情况下,我希望只绑定到IP,不绑定到端口,怎么办? 因为,如果我不绑定的话,假如我想指定通过网卡1通信,但是很可能系统会将该SOCKET绑定到网卡2的一个端口,如何解决?
IP是路端口是门,因此,只有IP是无法建立通信的。另外,网卡的MAC是不同的,完全可以区分是与哪块网卡建立了联系。socket通信需要先通过“握手”建立联系参数,再建立通信通道,因此,在握手结束后更改参数会使通信断开。
oldmtn 2014-09-24
  • 打赏
  • 举报
回复
引用 1 楼 xian_wwq 的回复:
IP可以不指定,用Any就可以。 端口不指定,没有试过。 如果不指定port,如何确定你的程序工作在哪个端口呢?
我在UNIX网络编程里面发现可以的。
wqvbjhc 2014-09-05
  • 打赏
  • 举报
回复
引用 3 楼 tauke_wang 的回复:
SOCKADDR中sin_port设为0,系统指定为占用的端口
+1
firefly3233 2014-09-05
  • 打赏
  • 举报
回复
做一个遍历网络适配器,人工选择网络适配器,或隐式指定网络适配器,就绑定到了固定的IP上,这样就不会绑定到其它IP上了。
然后sin_port设为0
tauke_wang 2014-09-04
  • 打赏
  • 举报
回复
SOCKADDR中sin_port设为0,系统指定为占用的端口
Saleayas 2014-09-04
  • 打赏
  • 举报
回复
bind 是在服务器端,你bind 到端口,然后告诉你的客户端,你的端口XXX是为其服务的。 而 IP 是在客户端连接你的时候用的。服务器不用的。
xian_wwq 2014-09-04
  • 打赏
  • 举报
回复
IP可以不指定,用Any就可以。 端口不指定,没有试过。 如果不指定port,如何确定你的程序工作在哪个端口呢?

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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