c++ - 服务器与不同的套接字端口连接
问题描述
我读过一个模拟面试的问题。这是问题...
编写一个 C++ 程序以同时在端口 2345、4325 上的 2 个不同套接字上连接服务器(例如 IP:192.168.10.131)。
我的疑问是它是否说创建 2 个套接字,分别具有公共接口 ip 192.168.10.131 和端口 2345,4325。或者说将具有接口 ip 192.168.10.131 的服务器连接到另一台服务器机器上不同套接字端口上的两个不同连接套接字..
如果我猜对了第一个,那么我只需要创建两个套接字连接并在单个线程上启动它们。
如果第二个是正确的,我需要怎么做......请帮助......
解决方案
最简单的解释(在采访中可能是正确的,但你当然会问)是创建两个套接字并将一个连接到给定 IP 地址上的每个给定端口。
TCP 连接由 4 元组(源地址、源端口、目标地址、目标端口)定义。源地址和端口通常与此类问题无关,因为默认情况下会自动选择它们。因此,当问题说“在端口 2345,4325 上的 2 个不同套接字上”时,最可能的解释是从客户端的角度来看,这些是目标端口。
所以它实际上是两次调用socket(2)
和两次调用connect(2)
,可能还有一些其他函数,例如inet_pton(3)
.
至于“同时”,是的,您可以使用线程,但可能更好的解决方案是使用select(2)
. 太快跳到多线程解决方案可能是面试中的危险信号。再一次,你想问这个问题。
推荐阅读
- excel - 如何使用二维数组作为查找填充列(VBA)
- swift - UITableView 在 reloaddata 上滚动
- php - 循环遍历 PHP 中的数组以更新 MySQL 中的记录,但未获得所有结果
- html - 如何在选择标签上设置选择,而不是选项标签
- c# - 仅本地主机端点
- javascript - 即使文件已正确加载,在 jquery 中加载自定义文件也会返回错误
- c# - 如何将字符串从 PayPal 的 payment_date 转换为日期时间
- php - 如何检查更新实体(表格行)是否成功并返回真/假响应?
- php - 我想显示另一个具有相同 product_id laravel 的表中的 product_name
- node.js - 如何通过 id 从另一个集合字段获取数据