推 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)
推 johnpage:timeout太短會導致對方無法連線,路由也要時間 01/08 07:57
推 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)
推 Marty:非同步要開另一個Thread 你沒開一定是同步 01/09 13:28
→ Marty:你會停住也是因為在同一個Thread執行 開一個新的就不會這樣 01/09 13:30
喔喔,那我有用Thread去跑這個連線的程式,所以應該是非同步
※ 編輯: cf1064 來自: 114.39.159.66 (01/10 08:56)