假設我有一個基本的C#套接字服務器。c#套接字檢查傳入連接並且一次只接受一個連接
TcpListener listener = new TcpListener(8888);
listener.Start();
Socket clientSocket = listener.AcceptSocket();
這將接受來自客戶端的第一個連接。
但是,假設我們有10個傳入連接。我不希望接受全部10個連接,我想列出所有未決連接,並選擇一個連接,我將接受並與其交換數據 - 我們可以假設我可以通過其IP地址識別它們。交換完成後,我將關閉套接字並選擇不同的連接來交換數據。
我不需要有超過1個活動連接,因爲我一次只能服務一個客戶端。
這樣的壯舉可能嗎?或者我是否必須接受所有這些方法,並通過他們來解決問題?
編輯:客戶端超時不是一個問題。客戶端編程爲在超時情況下定期重試連接。
EDIT2:
我設法相當多的搜索後發現了類似的問題。看起來你不能區分客戶,直到你接受他們的連接。這裏的問題:
How to reject a connection attempt in c#?
我想我至少可以告訴連接企圖來自哪個IP地址,但它似乎是不可能的,直到我連接到客戶端。看起來我畢竟會穿過客戶端。
您可以通過接受然後關閉連接來完成此操作,但如果您無法及時找到,等待的連接最終會超時。 – nhouser9
@ nhouser9客戶端被編程爲在超時後重試連接嘗試,所以這對我來說不是問題。我將編輯這個問題來澄清。 – xIcarus
然後除了性能之外沒有真正的問題 - 如果服務器執行冗長的計算,您的客戶可能會等待相當長的一段時間。但是,否則,沒有任何東西阻止您接受連接,關閉連接並接受新的連接。 – nhouser9