参考URL
.NET Framework ネットワーク プログラミングのソース(C#版)を参考にPowerShellに落とし込んだもの。
ベースの仕様
基本は、マイクロソフトの記載のとおり。以下抜粋
このアプリケーションは、クライアントからの接続要求を受け取るサーバーの動きをする。
このサーバーは同期ソケットで構築されるため、サーバー アプリケーションの実行は、クライアントからの接続を待っている間、一時停止となる。
このアプリケーションはクライアントから文字列を受信し、それをコンソールに表示し、クライアントにエコー バックする。 クライアントからの文字列には、メッセージの終わりを伝えるための文字列 “<EOF>” が含まれている必要がある。
そのほか、オリジナル要素として、ちょっとコメント出力を追加している。
[byte[]]$bytes = New-Object byte[] 1024
[int]$port = 11000
[array]$HostEntries = [net.Dns]::Resolve([Net.Dns]::GetHostName())
$IPAddress = $HostEntries.AddressList[1]
$localEndPoint = New-Object System.Net.IPEndpoint($IPAddress, $port)
$SocketType = [System.Net.Sockets.SocketType]::Stream
$ProcotocolType = [System.Net.Sockets.ProtocolType]::Tcp
#socket
$Listener = New-Object System.Net.Sockets.Socket($IPAddress.AddressFamily,
$SocketType,$ProcotocolType)
try
{
Write-Host 'IP is ' $IPAddress
Write-Host 'Port is ' $port
$Listener.Bind($localEndPoint)
$Listener.Listen(10)
while($true)
{
Write-Host 'Waiting for a connection...'
$handler = $listener.Accept()
[String]$data = $null
#An incoming connection needs to be processed.
while ($true) {
$bytesRec = $handler.Receive($bytes);
$data += [System.Text.Encoding]::ASCII.GetString($bytes, 0, $bytesRec)
write-host "data received : {0}", $data
if ($data.IndexOf("<EOF>") -gt -1 ) {
write-host "break"
break
}
}
write-host "Text received end : {0}", $data
#Echo the data back to the client.
[byte[]]$msg = [System.Text.Encoding]::ASCII.GetBytes($Data)
$handler.Send($msg);
$handler.Shutdown([System.Net.Sockets.SocketShutdown]::Both);
$handler.Close();
}
}
catch
{
Write-output 'err:' $error.ToString()
}
Finally
{
write-host '\nPress ENTER to continue...'
Read-Host
}
仕様は、この通り
コメント