gpt4 book ai didi

sockets - 一台机器有 2 个网卡。连接到套接字时将使用哪一个?

转载 作者:行者123 更新时间:2023-12-03 21:10:32 28 4
gpt4 key购买 nike

假设我创建了一个非常简单的套接字连接,如何以编程方式:

  • 找出什么接口(interface)(ip地址
    /NIC) 正在使用中。
  • 强制其他接口(interface)
  • 最佳答案

    无论您使用哪种语言,您最终都将使用位于原始 实现之上的套接字库。 BSD 套接字 C 网络库。尽管您可能需要针对不同的库和语言更改一些内容,但以下信息至少应该有助于确定在您的库文档中查找的位置。

    服务器

    通常,服务器程序发出以下调用序列:

  • socket()返回一个“ float ”套接字对象。
  • bind()将套接字绑定(bind)到机器中(通常)所有网络接口(interface)卡(NIC)上的特定众所周知的端口号。
  • listen()使套接字“活”起来。
  • accept()阻塞,直到与客户端计算机建立连接。

  • 您可以决定使用哪个 NIC 的关键在于对 bind() 的调用。 ,它需要一个包含 IP 地址和端口号的数据结构。通常的策略是传递特殊值 INADDR_ANY对于 IP 地址,表示连接应该使用机器中的任何和所有 NIC,但是可以指定特定 NIC 的 IP 来仅通过该 NIC 接收连接。

    客户

    通常,客户端程序发出以下调用序列:
  • socket()返回一个“ float ”套接字对象。
  • connect()将套接字绑定(bind)到随机选择的 NIC 上的随机选择的端口,并尝试连接到远程 host:port指定的组合。

  • 那么客户端如何选择使用什么网卡呢?客户也可以选择调用 bind()如果它愿意,在 socket() 之后及之前 connect() .通常这不会仅仅因为 connect()将自动绑定(bind)未绑定(bind)的套接字,以允许通过任何 NIC 访问(这通常是所需的行为),但可以通过调用 bind() 关闭此自动绑定(bind)明确地。在这种情况下,您应该为端口号指定 0 以让操作系统为您选择一个随机端口号。

    建立连接后,您可以调用 getsockname()获取有关套接字的信息,例如它绑定(bind)到哪个 IP(即它正在通过哪个 NIC 进行通信)以及分配的端口号(在客户端程序的情况下)。

    关于sockets - 一台机器有 2 个网卡。连接到套接字时将使用哪一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/428313/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com