PowerShell版 同期サーバー ソケットの例

PowerShellカテゴリを表すパンダのイラスト PowerShell

この記事でできること

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環境に合わせて整理しました。
  • 追加この記事でできることと前提条件、動作確認のためのクライアント接続手順を追加しました。

文書情報

記事タイトル
PowerShell版 同期サーバー ソケットの例
作成日
更新日
Source URL
https://papanda925.com/?p=1725

ライセンス: 本記事のうち、当サイトが権利を有する本文・自作図表は、特記なき限り CC BY 4.0 で利用できます。生成AIを活用して作成・編集した内容を含みます。コードについて、別途ライセンス表示またはリンク先GitHubリポジトリのライセンスがある場合は、その条件を優先します。引用・第三者資料・画像・商標等は本ライセンスの対象外です。 利用ポリシー

タイトルとURLをコピーしました