作者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)