参考URL
.NET Framework ネットワーク プログラミングのソース(C#版)を参考にPowerShellに落とし込んだもの。
ベースの仕様
基本は、マイクロソフトの記載のとおり。以下抜粋
このアプリケーションは、クライアントからの接続要求を受け取るサーバーの動きをする。
このサーバーは同期ソケットで構築されるため、サーバー アプリケーションの実行は、クライアントからの接続を待っている間、一時停止となる。
このアプリケーションはクライアントから文字列を受信し、それをコンソールに表示し、クライアントにエコー バックする。 クライアントからの文字列には、メッセージの終わりを伝えるための文字列 “<EOF>” が含まれている必要がある。
そのほか、オリジナル要素として、ちょっとコメント出力を追加している。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
[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 } |
仕様は、この通り
コメント