我需要開發一個客戶端服務器系統,我可以讓多個客戶端同時與一臺服務器進行通信。我想通信xml序列化對象,還需要發送和接收其他命令來調用方法。現在,我剛剛開始在C#和.Net中進行套接字編程,並發現異步I/O是要走的路,以便方法不會阻止代碼的執行。還有很多例子,如何構建一個簡單的客戶端服務器系統。所以我對這是如何工作有一個基本的瞭解。多個客戶端 - 一個服務器連接帶有套接字tcp/ip c#.net
無論如何,我還不清楚的是如何設置一個可以管理多個客戶端連接的服務器? 我可以只爲每個連接創建一個新的套接字,然後將它們存儲在某種列表中? 我是否需要某種多路複用才能達到此目的? 我必須在多個端口上收聽嗎? 這裏最好的辦法是什麼?
而另一件事是,如果我需要開發自己的協議來區分我實際上通過網絡發送的內容 - > xml序列化對象或一個命令,它可能只是一個字符串編碼的ascII或其他東西。或者我會開發自己的協議來發送這些命令?
任何形式的幫助都是好的!如果有人知道一本涵蓋此類內容的好書,請告訴我。乾杯
我忘了提,我的一些客戶,其應該與我的服務器進行通信將是PDA,因此我用緊湊的框架......所以這可能在一定的限制帶來的...
只需閱讀上面張貼的鏈接。這真的很有用。我沒有得到什麼是你本地港口的意思?假設我正在8221端口收聽任何IP地址。那我該如何創建一個新的套接字來處理與本地端口的傳入連接?那麼客戶是否也必須改變港口,或者這是如何工作的? 非常感謝! – jagse 2010-05-19 15:12:00
創建綁定到未使用的本地端口的新套接字以及將客戶端移植到新套接字的過程都由TCP/IP堆棧爲您處理。所以,就服務器代碼而言,您可以繼續在8221上進行監聽;就客戶端代碼而言,它已成功連接到8221(儘管它實際上與服務器的TCP/IP堆棧選擇的動態端口進行通信)。 – 2010-05-19 19:26:29
我沒有得到的是,我的監聽「服務器套接字」如何傳遞到新創建的套接字的連接。 我建議我有一個套接字並調用BeginAccept,如下所示: socket.BeginAccept(new AsyncCallback(OnClientConnect),null); 但在我的OnClientConnect回調中,如何將此連接傳遞給新套接字? – jagse 2010-05-19 20:27:14