我目前正在編寫客戶端 - 服務器應用程序。客戶端發送一個UDP廣播消息,試圖定位一個服務器,服務器發送一個UDP廣播消息來標識其位置。使用TCP c將數據包從服務器發送到特定客戶端#
當客戶端收到標識服務器位置的消息時,它會嘗試使用socket.Connect(remoteEndPoint)連接到服務器。
服務器在偵聽套接字上偵聽這些TCP請求,並使用listensocket.accept()接受請求。客戶端詳細信息存儲在陣列中(包括其IP和端口號)
客戶端向服務器發送一條消息,提供有關用戶輸入的用戶名和密碼的信息。
服務器檢查數據庫中的用戶名和密碼,並根據結果向發送請求的客戶端發送TCP消息(這是它的中斷點),以便使用偵聽套接字來檢查U & P.我試圖使用下面的代碼來發送TCP消息,但它不會工作,因爲我得到一個錯誤。
TCPSocket.SendTo(message, clientsArray[i].theirSocket.RemoteEndPoint);
可以直接調用'Socket.Connect(remoteEndPoint)'和捕獲異常,看看是否您的服務器上使用此服務器已打開。通過這種方式會更簡單。正如我所說的那樣,你可以在代碼中完全刪除UDP的存在。你可以通過clientsArray [i] .theirSocket.Send(msg);'發送給一個連接的客戶端。由於'SendTo'僅在UDP中使用。 – J3soon
我只使用UDP來避免在服務器端使用如此多的資源,因爲UDP無限期地廣播服務器位置不是一個好主意。我知道連接正常,並且服務器處於打開狀態,因爲我可以在客戶端和服務器端看到它(消息出現在GUI上,表示客戶端已連接),並且服務器是否關閉消息出現在客戶端。我試圖發送使用*** TCPSocket.SendTo(message,clientsArray [i] .theirSocket.RemoteEndPoint); ***這是完全相同的,但我得到的錯誤。 – JOsh
我說'SendTo'函數用在** UDP Only **中,所以你只能在我的答案中使用'Send'函數作爲使用TCP **的** Socket。你可以完全忘記'SendTo'函數,因爲你正在使用TCP。 – J3soon