2013-03-06 54 views
1

我對套接字編程相當新穎 - 所以這可能是一個簡單的問題,但我真的想澄清。在服務器上使用不同的端口號

我有一個多客戶端到單個服務器程序:個人客戶端發送消息到服務器處理它們,然後將它傳遞到目的地,即服務器是中介。

在服務器端,每個客戶端都有一個線程用於偵聽來自客戶端的消息(它將被放置在緩衝區中)。目前所有的客戶端都發送消息到同一個端口(據我所知)。

我正在考慮設置另一個線程,服務器將在其上傳輸消息之前處理這些消息。使用服務器上的另一個端口發送這些消息是否合理?

我不是說這是一個討論,但我不知道什麼是常見或更多的邏輯做 - 任何建議?

在客戶端,我計劃讓它有一個線程用於發送消息到服務器,另一個線程用於接收。請讓我知道是否需要其他信息!

編輯

目前,它是一個1-服務器與多(現在幾十,幾百更高版本)-client程序 - 我似乎有客戶從我的服務器接收郵件的問題(我因此我認爲使用相同的端口可能會成爲問題),但我會再次嘗試使用相同的端口並查看。我認爲這可能是收到端口太忙而不能發送消息。

+0

我假設同一臺服務器向客戶端發送和接收消息,如果是這樣,那麼你可能會使用相同的端口。我看不出爲什麼。否則,對於多個服務器,使用兩個端口可能是明智的。也許以後出於故障排除的原因。 – pandoragami 2013-03-06 08:20:49

+0

你在使用什麼操作系統?在Linux上有'select'系統調用,它可以用來幾乎完全擺脫線程。服務器週期將如下所示:'select'爲您提供有關描述符(套接字)的信息,可以爲您提供數據。您循環這些套接字並處理數據(接受連接/生成響應),然後再重複一遍。 – 2013-03-06 08:25:31

+0

該計劃的確切用意是什麼?客戶端 - 服務器程序的範圍可以從1client-1server到1000clients-100servers,每種服務器都有不同的體系結構以滿足不同的需求。 – user1952500 2013-03-06 08:25:34

回答

1

目前所有的客戶端都發送消息到相同的端口(據我所知)。

你是什麼意思,「據我所知」?您必須知道您是否在服務器上打開多個端口。

在服務器上使用另一個端口發送這些消息是否合理?

不,它不。如果您使用的是TCP,則將消息發送回相同的套接字。如果您使用UDP,則不需要多個UDP套接字,並且如果回覆來自發送請求的相同ip:端口,則它簡化了客戶端和應用程序協議。

+0

EJP表示TCP連接是雙向的,並且同時發送和接收數據。由於服務器可以接受單個端口上的多個連接,因此幾乎不需要保持更多端口的打開。 – Basilevs 2013-03-06 09:00:01

+0

@Basilevs不要假設告訴人們我的意思。如有必要,我可以自己解釋,而實際上我在這裏的意思是這個問題沒有任何意義。您對TCP的陳述都是真實的,但在製作時不需要隱藏在其他人的背後。 – EJP 2013-03-11 05:17:58

相關問題