首页 > 解决方案 > 服务器与不同的套接字端口连接

问题描述

我读过一个模拟面试的问题。这是问题...

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

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

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

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

标签: c++linuxsocketstcp

解决方案


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

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

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

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


推荐阅读