我相信這有一個簡單的解決方法,但現在我似乎無法找到一個優雅的解決方案。我已經構建了一個接受多個客戶端並處理它們的ASync C#服務器應用程序,但要繼續操作,我需要能夠確定哪些客戶端連接到了我的服務器(將只有兩個客戶端執行不同的操作)。C#中的異步套接字 - 瞭解您的客戶端
當我的程序接受這些客戶端時,我希望服務器知道客戶端地址,並指出哪個客戶端可能存儲在一個小列表中。
所以我猜我在問什麼,當客戶端連接時,發送一個預定義的消息到服務器,讓它知道客戶端應用程序到哪個地址的簡單方法?
謝謝
我相信這有一個簡單的解決方法,但現在我似乎無法找到一個優雅的解決方案。我已經構建了一個接受多個客戶端並處理它們的ASync C#服務器應用程序,但要繼續操作,我需要能夠確定哪些客戶端連接到了我的服務器(將只有兩個客戶端執行不同的操作)。C#中的異步套接字 - 瞭解您的客戶端
當我的程序接受這些客戶端時,我希望服務器知道客戶端地址,並指出哪個客戶端可能存儲在一個小列表中。
所以我猜我在問什麼,當客戶端連接時,發送一個預定義的消息到服務器,讓它知道客戶端應用程序到哪個地址的簡單方法?
謝謝
有很多方法。
最簡單的方法之一是爲每個客戶端應用程序都有不同的端口。另一種方式是爲了「連接」(在TCP握手之後)在交換任何數據之前發送標識應用程序的消息。另一種選擇是將標題添加到每個請求/回覆中,說明應用程序並存儲它。
您可以免費通過套接字發送所有類型的數據。
爲了解決這個問題,在客戶端和服務器之間創建一些協議。
例如,在連接時發送第一條消息以識別客戶端到服務器。 從那裏繼續與這兩者之間的正常交談。
服務器可以接受消息並存儲顯示它,甚至在第一條消息不包含約定信息時拒絕客戶端。
你說的是識別客戶端的內部使用,還是說你不知道從哪個客戶端例如'EndReceive()'來了?如果後者是這種情況:使用一個狀態對象('IAsyncResult.AsyncState'),其中包含您的客戶端類,其中包含您在調用'BeginReceive()'時提供的連接套接字。 – CodeCaster
對於內部使用,謝謝你的回覆。 – Nate