PowerShell中的System.Net.Sockets.TcpClient变慢

时间:2016-10-14 15:45:40

标签: .net powershell

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参数,但为什么它会很快呢?

2 个答案:

答案 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