55 lines
1.6 KiB
PowerShell
55 lines
1.6 KiB
PowerShell
<#
|
|
.SYNOPSIS
|
|
Connects to a tcp-echo instance, prints the greeting, sends a message and prints the reply.
|
|
.EXAMPLE
|
|
.\test-echo.ps1 -Server sparkyxf.cz -Port 9098
|
|
.\test-echo.ps1 -Server sparkyxf.cz -Port 9099 -Message "ping"
|
|
#>
|
|
[CmdletBinding()]
|
|
param(
|
|
[Parameter(Mandatory = $true, Position = 0)]
|
|
[string]$Server,
|
|
|
|
[Parameter(Mandatory = $true, Position = 1)]
|
|
[ValidateRange(1, 65535)]
|
|
[int]$Port,
|
|
|
|
[string]$Message = "hello",
|
|
|
|
[int]$TimeoutMs = 5000
|
|
)
|
|
|
|
$ErrorActionPreference = 'Stop'
|
|
|
|
function Read-Line {
|
|
param([System.IO.StreamReader]$Reader)
|
|
$line = $Reader.ReadLine()
|
|
if ($null -eq $line) { throw "Connection closed by server." }
|
|
return $line
|
|
}
|
|
|
|
$client = New-Object System.Net.Sockets.TcpClient
|
|
try {
|
|
$client.ReceiveTimeout = $TimeoutMs
|
|
$client.SendTimeout = $TimeoutMs
|
|
|
|
Write-Host "Connecting to ${Server}:${Port} ..." -ForegroundColor Cyan
|
|
if (-not $client.ConnectAsync($Server, $Port).Wait($TimeoutMs)) {
|
|
throw "Connect to ${Server}:${Port} timed out after ${TimeoutMs} ms."
|
|
}
|
|
|
|
$stream = $client.GetStream()
|
|
$reader = New-Object System.IO.StreamReader($stream, [System.Text.Encoding]::UTF8)
|
|
$writer = New-Object System.IO.StreamWriter($stream, (New-Object System.Text.UTF8Encoding($false)))
|
|
$writer.NewLine = "`n"
|
|
$writer.AutoFlush = $true
|
|
|
|
Write-Host "<- $(Read-Line $reader)" -ForegroundColor Green # greeting: [instance] connected
|
|
Write-Host "-> $Message"
|
|
$writer.WriteLine($Message)
|
|
Write-Host "<- $(Read-Line $reader)" -ForegroundColor Green # echo: [instance] <message>
|
|
}
|
|
finally {
|
|
$client.Dispose()
|
|
}
|