この記事でできること
PowerShellを使用して、TCPの同期ソケットサーバーを構築し、クライアントからの接続待受、データ受信、およびエコーバック処理を行う方法を確認できます。
前提条件
実行には以下の環境が必要です。
- Windows PowerShell または PowerShell 7
- TCPポート 11000 がファイアウォール等でブロックされていないこと
ベースの仕様
.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
$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
while ($true) {
$bytesRec = $handler.Receive($bytes);
$data += [System.Text.Encoding]::ASCII.GetString($bytes, 0, $bytesRec)
Write-Host "data received : $data"
if ($data.IndexOf("<EOF>") -gt -1 ) {
Write-Host "break"
break
}
}
Write-Host "Text received end : $data"
[byte[]]$msg = [System.Text.Encoding]::ASCII.GetBytes($data)
$handler.Send($msg);
$handler.Shutdown([System.Net.Sockets.SocketShutdown]::Both);
$handler.Close();
}
}
catch
{
Write-Output 'err: '$_.Exception.Message
}
Finally
{
Write-Host 'Press ENTER to continue...'
Read-Host
}
使い方・動作確認手順
1. 上記スクリプトをPowerShell上で実行します。
2. 別のPowerShellインスタンスやTelnet、Netcat等のTCPクライアントから、表示されたIPアドレスとポート11000へ接続します。
3. メッセージを入力し、最後に <EOF> を送信するとサーバー側でデータを受信してエコーバックが返されます。
参考URL
同期クライアント ソケットの例 – Microsoft Learn
この記事の更新履歴
この記事は、生成AIを活用した自動レビュー・更新フローにより内容を見直し、必要な修正を反映しています。
2026年9月12日
- 変更シンタックスハイライトブロックの構文設定をCocoon環境に合わせて整理しました。
- 追加この記事でできることと前提条件、動作確認のためのクライアント接続手順を追加しました。
