2012-11-21 33 views
1

我正在使用UDP進行通信的多客戶端/單服務器應用程序。 原因是我正在使用多點傳送,並且正在流式傳輸音頻。Java - 使用多個數據報套接字和端口

我在UDP/TCP方面還沒有太多的經驗,我不確定是否可以使用幾個不同端口的多個DatagramSockets。 我有幾個不同的對象,我需要從一個設備發送到另一個,因此我爲每種類型的對象使用一個端口。

這樣好嗎?我現在已經在使用大約7個不同的端口。 如何儘可能使用最小端口?

回答

1

對於多個客戶端和一臺服務器,可以讓所有客戶端將數據發送到服務器上的相同端口。服務器將讀取來自一個套接字(正在讀取該端口上的數據)的所有信息。每個發送數據的客戶端都可以發送元數據以及識別用戶的每個有效負載,因此服務器可以識別哪個接收的數據包屬於誰。實際上,我認爲你已經可以看到數據包來自使用內置功能的地址。您可以使用這些地址來識別不同的客戶端,但是您可能需要一個更強大的解決方案來使您的實施更加安全。

+0

是的,我現在已經在做這個了。我唯一擔心的是我有大約7或8個端口正在被讀取。使用更少的套接字(和端口)更好還是這不成問題?我認爲如果有其他程序正在運行,並且巧合地使用相同的端口,則可能會出現問題。 – dumazy

+1

沒有我說的是,服務器有一個套接字,它綁定到一個端口。所有客戶端都將數據發送到同一端口(和相同的套接字)。所以服務器有一個讀取所有內容的套接字。那就是使用1端口,而不是7或8.如果您擔心端口被佔用,請讓服務器將其套接字綁定到端口0,此時它將隨機選擇一個可用端口(然後您必須與您的端口通信客戶以某種方式)。 – wardd