簡體   English   中英

服務器可以直接連接它所連接的兩個套接字嗎?

[英]Can a server directly connect two sockets that it is connected to?

假設我在Internet上有一個用C編寫的公共服務器,該服務器連接到兩個獨立的客戶端。 兩個客戶端都啟動了連接。 一個客戶端是(例如)iOS應用程序,另一個是本地Windows應用程序。

我服務器的目的是允許這些客戶端相互發送文本消息。 客戶端1發送一條消息,服務器接收它,然后將其轉發到客戶端2。當客戶端2發送一條消息時,情況相反。

感覺效率低下。 我真正想要的是讓這兩個連接都與服務器聯系,然后讓服務器將這兩個客戶端直接彼此連接-之后,我的服務器會忘記這兩個客戶端,因為它們負責彼此通信。 然后,我的服務器可以自由以相同的方式連接其他客戶端。

我的問題是:(使用TCP和/或UDP)這是否可能? 兩個客戶端都不一定具有公共IP地址,這就是為什么他們必須啟動連接的原因。 但是,一旦建立連接,我的服務器就會知道兩個客戶端的連接地址。 有沒有辦法將它們連接在一起? 可以執行此類操作的系統調用吧?

不,您不能將兩個現有的TCP連接加入其中。

有2個選項:

1)將服務器放置在中間位置。 如果您在一台服務器上沒有數千個客戶端,那應該沒問題。

2)服務器可以向客戶端發送控制消息,並命令那些客戶端之間打開新的TCP連接。 服務器還應確定兩個客戶端中的哪個客戶端必須是新TCP連接的發起者。

選項2有問題,因為客戶端可能具有阻止進入所需端口的防火牆規則。 NAT也會引起問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM