我正在寫簡單的客戶端服務器程序。如何區分客戶端是否使用TCP或UDP從服務器端
客戶端使用UDP或TCP向服務器發送一些消息。服務器必須能夠支持UDP和TCP。
如果客戶端使用UDP發送消息,客戶端的方法調用順序爲socket(),bind(),sendto(),recvfrom(),close()
,服務器中的方法調用順序爲socket(),bind(),sendto(),recvfrom(),close()
。
如果它使用TCP, 服務器中的呼叫順序是 socket(),bind(),listen(),accept(),send(),recv(),close()
。 和在客戶端是 socket(),bind(),connect(),send(),recv(),close()
在我的程序中,用戶/客戶端在開始時給出了選擇他想要使用UDP或TCP的選擇。所以,我的主要問題是如何在服務器端知道或區分,如果客戶端使用TCP或UDP發送消息。如果它使用TCP,我必須調用listen(),accept(),send(),recv() ,如果它使用UDP,我不會調用listen(),accept(),而是調用sendto()和recvfrom )。
那麼,我怎麼才能區分/瞭解這一開始,以便我可以做出適當的函數調用。
謝謝。
那麼,我應該在服務器端創建兩個套接字,一個用於UDP,另一個用於TCP? – 2009-09-18 14:52:41
seg.server.fault,是的。 – 2009-09-18 15:15:58
@ seg.server.fault:我會推薦_not_在您的客戶端代碼中調用'bind()'。雖然它在技術上是可行的(並且在非常特定的情況下是必需的),但沒有客戶端'bind()'的默認行爲通常是您在應用程序層需要的。 另外,請記住,你可以在UDP套接字上調用'connect()'。它沒有進行任何握手,但是這意味着你可以使用'send/recv'而不是'sendto/recvfrom',這可能最終導致客戶端邏輯變得更簡單。 – Tom 2009-10-24 05:47:59