[.NET] Socket的connection timeout設定

看板Visual_Basic作者 (蚵仔)時間11年前 (2014/01/07 13:45), 編輯推噓4(401)
留言5則, 2人參與, 最新討論串1/1
各位大大好,想請問有人知道如何設定一個socket的連線timeout時間嗎? 在網路上找的結果是send和Receive可以去設定timeout時間,但是 在連線這部份的timeout就沒有資源了,因為如果要跑很多連線會因為某一 個連線不通,造成整個連線都被拖慢了,所以想請教是否有方法可以讓socket 的連線時間去縮短? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.163.245.121

01/07 16:26, , 1F
連線也算是傳送及接受的綜合結果
01/07 16:26, 1F
大大的意思是連線時間=連線+傳送+接收的時間? 那有沒有什麼方式可以縮短他在連線+傳送+接收時所花費的時間? 比如連線+傳送+接收時間大於某個值的時候就停止呢? 目前只看到可以設定傳送時間,接收時間這二個而己 目前socket連線+傳送的方式都放在dll,然後主程式會透過"多執行緒"去呼叫 dll,雖然這樣的方式可以不用因為某個ip連線過久導致其他ip的連線都在等待, 可是如果主程式持續一段時間呼叫無法dll然後那個ip無法連線的話, 會讓執行緒越來越多...希望有方式可以縮短socket連線這步驟的時間 另外,因為我下中斷點去看了一下,在連線時會因為連不到而停在那數秒 當連不到時丟出例外,結束程式,所以才會以為socket的connection可以去設定 他的timeout QQ ※ 編輯: cf1064 來自: 118.163.245.121 (01/07 16:43)

01/08 07:57, , 2F
timeout太短會導致對方無法連線,路由也要時間
01/08 07:57, 2F

01/08 08:00, , 3F
你是用非同步方式寫的嗎?
01/08 08:00, 3F
我看了一下官方socket的用法,非同步是指用beginXXXX去連線嗎? 如果是的話,那我的應該是同步的吧?我也不清楚非同步和同步差別QQ 以下是連線部份程式碼 Dim CoSocket As Socket If CoSocket Is Nothing Then Try Dim ip As IPAddress = IPAddress.Parse(SIp) 'Serial Port 1 Dim ipep As New IPEndPoint(ip, SPort) CoSocket = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) CoSocket.Connect(ipep) Catch e As Exception '斷線,例外處理,結束副程式 If status = "connect" Then CoSocket.Shutdown(SocketShutdown.Both) CoSocket.Close() CoSocket = Nothing ElseIf status = "disconnect" Then CoSocket = Nothing End If Exit Sub End Try End If ※ 編輯: cf1064 來自: 118.163.245.121 (01/08 10:30)

01/09 13:28, , 4F
非同步要開另一個Thread 你沒開一定是同步
01/09 13:28, 4F

01/09 13:30, , 5F
你會停住也是因為在同一個Thread執行 開一個新的就不會這樣
01/09 13:30, 5F
喔喔,那我有用Thread去跑這個連線的程式,所以應該是非同步 ※ 編輯: cf1064 來自: 114.39.159.66 (01/10 08:56)
文章代碼(AID): #1IovHZsv (Visual_Basic)
文章代碼(AID): #1IovHZsv (Visual_Basic)