2014-09-19 54 views
0

我試圖實現多線程UDP服務器,其中每個線程服務於一個客戶端。 到目前爲止,客戶正在正確註冊並且數據正在被客戶接收。爲了使其可靠,我試圖在特定時間間隔內未收到消息時發送否定確認。UDP-多線程服務器無法區分ack msg和連接msg

該確認被視爲來自新客戶端在服務器端recvfrom的()功能的請求。我如何在服務器端區分這兩者?有沒有與發送和接收相關的功能可以做到這一點?

該代碼是在c和我已經使用並行線程執行線程function.I已經使用了基本SENDTO()和recvfrom()套接字函數實現相同。

代碼大綱:

At the server side: 

recvfrom() 
when received: 
Add to client list 
create thread: 
send data in the thread function 
exit thread 

At the client side: 

sendto() -> to initiate the request to the server 
when time < timeout 
recvfrom() -> receive the data from the server 
when timeout occurs 
sendto() -> send negative acknowledgement. 
+2

在你的UDP數據前面放置一個命令代碼,指示它是什麼類型的消息。一個字節可能就足夠了。 – 2014-09-19 00:54:17

+0

我怎麼能夠在服務器端區分相同?使用從客戶端收到的消息的長度? – Networks101 2014-09-19 00:58:07

+0

如果你想要一個可靠的面向連接的數據報協議,你有兩種選擇。向TCP添加數據報層,或者嘗試向UDP添加可靠性和連接。首選要容易得多。 – user3386109 2014-09-19 01:27:32

回答

0

recvfrom()將填寫正確類型的套接字地址結構與客戶端的地址。

您可以維護將客戶端地址(包括端口號)映射到線程的數據結構。然後您可以使用它將來自客戶端的後續消息傳遞給正確的線程。