如果你不打算对客户做任何事情,那么你不必接受他们,可以停止倾听:
function listen-port ($port) {
$endpoint = new-object System.Net.IPEndPoint ([ipaddress]::any,$port)
$listener = new-object System.Net.Sockets.TcpListener $endpoint
$listener.start()
Start-Sleep -s 5
$listener.stop()
}
如果您需要对客户端执行某些操作,可以使用异步 AcceptTcpClient 方法(BeginAcceptTcpClient、EndAcceptTcpClient ):
function listen-port ($port) {
$endpoint = new-object System.Net.IPEndPoint ([ipaddress]::any,$port)
$listener = new-object System.Net.Sockets.TcpListener $endpoint
$listener.start()
$ar = $listener.BeginAcceptTcpClient($null,$null) # will not block here until connection
if ($ar.AsyncWaitHandle.WaitOne([timespan]'0:0:5') -eq $false)
{
Write-Host "no connection within 5 seconds"
}
else
{
Write-Host "connection within 5 seconds"
$client = $listener.EndAcceptTcpClient($ar)
}
$listener.stop()
}
另一种选择是在侦听器上使用Pending方法:
function listen-port ($port) {
$endpoint = new-object System.Net.IPEndPoint ([ipaddress]::any,$port)
$listener = new-object System.Net.Sockets.TcpListener $endpoint
$listener.start()
Start-Sleep -s 5
if ($listener.Pending() -eq $false)
{
Write-Host "nobody connected"
}
else
{
Write-Host "somebody connected"
$client = $listener.AcceptTcpClient()
}
$listener.stop()
}