try
{
$tcp = new-object System.Net.Sockets.TcpClient
$tcp.ReceiveTimeout = 500
$tcp.SendTimeout = 500
$tcp.Connect('127.0.0.1',80)
Write-Host "Connection possible!"
$tcp.close()
}
catch
{
Write-Host "Cannot connect!"
$_.Exception.Message
}
测量 - 命令 - 21秒(总是21!)
If $tcp.Connect('127.0.0.1',80,$Null)
Measure-Command - 10毫秒
为什么?
我知道应该没有$ Null参数,但为什么它会很快呢?
答案 0 :(得分:2)
我知道应该没有$ Null参数,但为什么它会很快呢?
因为您的代码已损坏。
try
{
}
catch
{
}
正在捕捉每个可能的错误,隐藏错误消息。
你的第一个代码,错误是一个真正的TCP连接,在等待约30秒后超时,连接确实失败了。
你的第二个代码,错误是" 找不到Connect的过载,它带有3个参数" - 但是你隐藏了错误并且错误地打印并且无法连接'代替。这会误导你。它不会更快,而且会被打破。
发送和接收超时不适用于连接,它们是发送和接收数据的方法超时。无法使用.connect()
方法更改连接超时,您需要在没有自己超时的情况下建立异步连接。
e.g。 How to set the timeout for a TcpClient?和How to configure socket connect timeout(两者都是C#,但仍然是.Net,这些想法适用于PowerShell)。
这个https://superuser.com/questions/805621/test-network-ports-faster-with-powershell有一个PowerShell的答案
答案 1 :(得分:0)
$tcp.Connect('127.0.0.1',80,$Null)
抛出异常
Cannot find an overload for "Connect" and the argument count: "3".
在此处阅读更多内容:MDSN Documentation