使用PowerShell进行Socket.Select会出错

时间:2014-02-13 04:46:53

标签: sockets select powershell

我正在尝试使用PowerShell编写TCP服务器。

似乎可以在Select呼叫中正常工作:

$clients = @()
$socket = New-Object System.Net.Sockets.Socket([System.Net.Sockets.AddressFamily]::InterNetwork, [System.Net.Sockets.SOcketType]::Stream, [System.Net.Sockets.ProtocolType]::Tcp)
$socket.Bind((New-Object System.Net.IPEndPoint ([system.net.ipaddress]::any, $port)))
$socket.Listen(10)
$clients += $socket
[System.Net.Sockets.Socket]::Select($clients, $null, $null, -1)

这会出现以下错误消息:

The operation is not allowed on objects of type System.Management.Automation.PSObject. Use only objects of type System.Net.Sockets.Socket.

我认为这是因为PowerShell包装了它的对象?只是不确定为什么它会失败Select它在其他地方成功,或者如何解决它。

谢谢!

1 个答案:

答案 0 :(得分:1)

是的,PowerShell倾向于包装对象,特别是在V2 IIRC中。特别是创建一个列表,例如:

$clients = new-object System.Collections.Generic.List[System.Net.Sockets.Socket]
...
$clients.Add($socket)
[System.Net.Sockets.Socket]::Select($clients, $null, $null, -1)

您也可以尝试演员,例如:

[System.Net.Sockets.Socket]::Select([System.Collections.IList]$clients, $null, $null, -1)