powershell - Powershell 中的实时 TCP 接收器
问题描述
我一直在尝试在 Powershell 中创建一个发送和接收数据的 TCP 客户端,但我不知道如何让我的脚本实时显示服务器输出。我尝试使用 Start-Job 和 Receive-Job 来执行此操作,但要让作业显示其输出,您必须每次都调用 Receive-Job。我的目标是让 PS 终端可用于读取 Read-Host 的输入,同时等待来自服务器的数据并显示它。我的代码是:
$server = "127.0.0.1"
$port = 2137
$connection = New-Object System.Net.Sockets.TcpClient($server, $port)
$stream = New-Object System.Net.Security.SslStream $connection.GetStream(),$false,({$true} -as [System.Net.Security.RemoteCertificateValidationCallback])
$stream.AuthenticateAsClient("Foo")
$reader = New-Object System.IO.BinaryReader($stream)
$writer = New-Object System.IO.StreamWriter($stream)
$writer.WriteLine("aadmin")
$writer.Flush()
$writer = New-Object System.IO.BinaryWriter($stream)
$read = $reader.ReadInt32()
if($read -eq 0)
{
$writer.Write(0)
Write-Host "Password: " -NoNewline
$password = Read-Host
$writer.Write($password)
$read = $reader.ReadInt32()
if($read -eq 0)
{
$receiver = Start-Job {
while($true)
{
if($connection.Available -ge 1)
{
$read = $reader.ReadString()
Write-Host $read
}
}
}
do
{
Write-Host "[admin@server] > " -NoNewline
$in = Read-Host
$writer.Write($in)
Receive-Job $receiver
} while($in -ne "exit" -and $connection.Connected)
}
else { Write-Host "Error: ?" }
Stop-Job $receiver
Remove-Job $receiver -Force
$reader.Close()
$writer.Close()
$stream.Close()
$connection.Close()
}
else { Write-Host "Error" }
解决方案
推荐阅读
- sas - 在 SAS 中计算价值加权回报
- oracle - 如何将 oracle 表作为 Spark Streaming 的源?
- python - 如何在 Jupyter MD 单元中使用欧米茄写入欧姆值
- c - libcurl 简单 vs 多界面
- reactjs - 无法在 React js Web 应用程序中使用 material-ui-pickers
- jquery - :not(.classA, .classB, .classC) 的对面选择器,用于 (X and (A or B or C)) 选择器
- python - 改进 Codejam 的“无限煎饼屋”的解决方案
- haskell - Haskell 中的模块签名是什么?
- c++ - 嵌套在二维数组中的for循环
- java - @WebMvcTest creating more than one Controller for some reason