cpp - udp example



udp聊天服務器在c (3)

只需創建一個UDP套接字並調用connect()。 但是你不想這樣做。 UDP服務器的全部喜悅是它們只需要一個套接字。 想一想。 你只需要TCP中的線程,因為你不得不擁有一個專用的套接字,而專用的線程是處理它的最簡單(而不是唯一)的方式。 在UDP中,你可以繼續讀取同一個套接字,並且源地址告訴你每個圖表來自哪個客戶端。

https://src-bin.com

我正在嘗試用c語言編寫udp聊天服務器。 我之前寫過tcp聊天服務器,沒關係。

在tcp服務器中,accept函數返回一個fd號碼,服務器根據這個fd號碼與特定的客戶端進行通信。

但是在udp中,我怎麼能聽一個特定的客戶?

在我的tcp服務器,客戶端連接到服務器後,創建一個線程,它聽這個客戶端。 所以對於每個客戶端來說,都有一個線程可以根據從接收函數返回的fd號碼進行監聽。 所以任何消息都可以根據這個fd號碼發送給特定的客戶端。

我怎麼能在udp服務器上實現這個?

感謝您的回答。


Answer #1

我用recvfrom和sendto函數。 首先客戶端通過sendto向服務器發送消息。 服務器通過recvfrom接收消息。 在recvfrom我把sockaddr_in結構的客戶端的地址。 我不能存檔後,使用sendto


Answer #2

這很簡單。 如你所知,UDP是無連接的,它可能共享相同的端口。所以這個想法就在這裡。只要為每一個客戶端創建線程。如果你有更多的CPU核心,那麼你就可以使用每個核心來處理特定數目的客戶端。 (可以通過map完成)現在,當同一個客戶端再敲一下就把它發送到那個線程和核心。所以如果你有1 ... n核心,你必須創建n個線程,把cpu設置成每個線程。

我已經用這種方式做了一個8核心服務器的實驗,它的工作正常。

在幾天之後,我將這個代碼放在我的博客上,然後把它交給千兆交換機。

matrixsust.blogspot.com

希望能幫助到你。





chat