作者cf1064 (蚵仔)
看板Visual_Basic
標題[.NET] Socket的connection timeout設定
時間Tue Jan 7 13:45:04 2014
各位大大好,想請問有人知道如何設定一個socket的連線timeout時間嗎?
在網路上找的結果是send和Receive可以去設定timeout時間,但是
在連線這部份的timeout就沒有資源了,因為如果要跑很多連線會因為某一
個連線不通,造成整個連線都被拖慢了,所以想請教是否有方法可以讓socket
的連線時間去縮短?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.163.245.121
1F:推 johnpage:連線也算是傳送及接受的綜合結果 01/07 16:26
大大的意思是連線時間=連線+傳送+接收的時間?
那有沒有什麼方式可以縮短他在連線+傳送+接收時所花費的時間?
比如連線+傳送+接收時間大於某個值的時候就停止呢?
目前只看到可以設定傳送時間,接收時間這二個而己
目前socket連線+傳送的方式都放在dll,然後主程式會透過"多執行緒"去呼叫
dll,雖然這樣的方式可以不用因為某個ip連線過久導致其他ip的連線都在等待,
可是如果主程式持續一段時間呼叫無法dll然後那個ip無法連線的話,
會讓執行緒越來越多...希望有方式可以縮短socket連線這步驟的時間
另外,因為我下中斷點去看了一下,在連線時會因為連不到而停在那數秒
當連不到時丟出例外,結束程式,所以才會以為socket的connection可以去設定
他的timeout QQ
※ 編輯: cf1064 來自: 118.163.245.121 (01/07 16:43)
2F:推 johnpage:timeout太短會導致對方無法連線,路由也要時間 01/08 07:57
3F:推 johnpage:你是用非同步方式寫的嗎? 01/08 08:00
我看了一下官方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)
4F:推 Marty:非同步要開另一個Thread 你沒開一定是同步 01/09 13:28
5F:→ Marty:你會停住也是因為在同一個Thread執行 開一個新的就不會這樣 01/09 13:30
喔喔,那我有用Thread去跑這個連線的程式,所以應該是非同步
※ 編輯: cf1064 來自: 114.39.159.66 (01/10 08:56)