【问题标题】:Server connecting with different sockets port服务器与不同的套接字端口连接
【发布时间】:2021-12-12 23:48:58
【问题描述】:

我读过一个模拟面试的问题。问题来了……

编写 C++ 程序以同时在端口 2345,4325 上的 2 个不同套接字上连接服务器(例如 IP:192.168.10.131)......

我的疑问是它是否说创建 2 个套接字,分别具有公共接口 ip 192.168.10.131 和端口 2345,4325。 或者说将具有接口 ip 192.168.10.131 的服务器连接到另一台服务器机器上不同套接字端口上的两个不同连接套接字..

如果我猜对了第一个,那么我只需要创建两个套接字连接并在单个线程上启动它们。

如果第二个是正确的,我需要怎么做......请帮助......

【问题讨论】:

  • 在真正的面试中,你当然应该能够向面试官寻求澄清。如果你这样做了,我认为答案很可能是他们希望你创建两个单独的套接字,每个套接字连接 同一远程服务器上的不同端口。如果你想要一个练习题,那就试试吧。但我认为这里的任何人都只能对最初提出这个问题的人的意图做出有根据的猜测。

标签: c++ linux sockets tcp


【解决方案1】:

最简单的解释(在采访中可能是正确的,但你当然会问)是创建两个套接字并将一个连接到给定 IP 地址上的每个给定端口。

TCP 连接由 4 元组(源地址、源端口、目标地址、目标端口)定义。源地址和端口通常与此类问题无关,因为默认情况下会自动选择它们。因此,当问题说“在端口 2345,4325 上的 2 个不同套接字上”时,最可能的解释是从客户端的角度来看,这些是目标端口。

所以实际上是对socket(2) 的两次调用和对connect(2) 的两次调用,可能还有一些其他函数,例如inet_pton(3)

至于“同时”,是的,您可以使用线程,但可能更好的解决方案是使用select(2) 对它们进行多路复用。太快跳到多线程解决方案可能是面试中的危险信号。再说一次,你会想问这个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-22
    • 2016-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-06
    相关资源
    最近更新 更多