![](/img/trans.png)
[英]Only one socket receives data. Two UDP server sockets bound to same port, different addresses on Windows
[英]Server connecting with different sockets port
我讀過一個關於模擬面試的問題。 這是問題...
編寫一個 C++ 程序,同時在端口 2345,4325 上的 2 個不同套接字上連接服務器(例如 IP:192.168.10.131)。
我的疑問是它是否在說分別創建 2 個具有公共接口 ip 192.168.10.131 和端口 2345,4325 的套接字。 或者說將具有接口 ip 192.168.10.131 的服務器連接到不同套接字端口上另一台服務器機器上的兩個不同連接套接字..
如果我猜對了第一個,那么我只需要創建兩個套接字連接並在單個線程上啟動它們。
如果第二個是正確的,我需要怎么做.... 請幫忙...
最簡單的解釋(在采訪中可能是正確的,但您當然會問)是創建兩個套接字並將一個連接到給定 IP 地址上的每個給定端口。
TCP 連接由四元組(源地址、源端口、目的地址、目的端口)定義。 源地址和端口通常與此類問題無關,因為默認情況下會自動選擇它們。 因此,當問題說“在端口 2345,4325 上的 2 個不同套接字上”時,最可能的解釋是從客戶端的角度來看,這些是目標端口。
所以它實際上是對socket(2)
兩次調用和對connect(2)
兩次調用,可能還有一些其他函數,如inet_pton(3)
。
至於“同時”,是的,您可以使用線程,但可能更好的解決方案是使用select(2)
對它們進行多路復用。 過快地跳轉到多線程解決方案可能是面試中的一個危險信號。 再次,你想問這個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.