這裏的新手問題..只是想在這裏確定..C#.Net Socket保持活躍時間?
這是不是一個HTTP保持活着的問題。
有一種方法可以確保套接字在一段時間後關閉()。
爲什麼我問這是因爲,如果我只是關閉套接字馬上..客戶端可能無法接收該數據包,以表示類似的密碼不正確等。
有沒有像內置的命令插座內的任何超時?
我試圖避免建立定時器或事件來關閉它關閉思維替代的解決方案
這裏的新手問題..只是想在這裏確定..C#.Net Socket保持活躍時間?
這是不是一個HTTP保持活着的問題。
有一種方法可以確保套接字在一段時間後關閉()。
爲什麼我問這是因爲,如果我只是關閉套接字馬上..客戶端可能無法接收該數據包,以表示類似的密碼不正確等。
有沒有像內置的命令插座內的任何超時?
我試圖避免建立定時器或事件來關閉它關閉思維替代的解決方案
我從來沒有嘗試過自己,但有LingerOption
。請參閱Socket.LingerState Property。
此屬性控制的 時間長度面向連接的連接 將一個 呼叫之後保持打開以關閉數據時仍然有待發送 。當你調用方法發送 數據給對等體時,這個數據被放置在 的輸出網絡緩衝區中。這個 屬性可用於確保在Close方法刪除 連接之前將此數據發送到遠程主機 。
我假設你正在談論TCP協議。
如果您想確保客戶端已收到某些內容,則客戶端需要發送最後收到的消息的響應(例如,錯誤的密碼),並且服務器在收到確認或關閉後會關閉連接readtimeout。
沒有工作太好,也許我沒有正確使用它? 'socket.LingerState = new LingerOption(true,3); socket.Send(new byte [] {0}); socket.Close();'發送零字節只有一次10次... ehhhh你知道我會讓它們打開嗎我認爲它們遲早會關閉 – SSpoke
嘗試設置'socket.NoDelay = true'並且還增加'3'來讓我們說'30'。 –
不變。 'socket.LingerState = new LingerOption(true,30); socket.NoDelay = true;'我猜這意味着放置在傳出網絡緩衝區上的數據會在那裏停留一段時間。甚至可能只有一分鐘......而這就等於我的客戶在3-5秒內甚至超時了。 – SSpoke