我正在尝试编写一个与一些java服务器代码通信的Powershell脚本。该脚本调用以下函数与服务器通信,当前服务器只是打印出它收到的消息。
Function Send-StringOverTcp (
[Parameter(Mandatory=$True)][String]$DataToSend,
[Parameter(Mandatory=$True)][UInt16]$Port)
{
Try {
$IPAddress = "XX.XXX.XX.X" #ip of server
$IPAddress = [IPAddress]$IPAddress.Trim()
$ErrorActionPreference = "Stop"
$TCPClient = New-Object Net.Sockets.TcpClient
$IPEndpoint = New-Object Net.IPEndPoint($IPAddress, $Port)
$TCPClient.Connect($IPEndpoint)
Write-Host -ForegroundColor Green "Connection established with
$IPAddress on port $Port"
$NetStream = $TCPClient.GetStream()
[Byte[]]$Buffer = [Text.Encoding]::ASCII.GetBytes($DataToSend)
$NetStream.Write($Buffer, 0, $Buffer.Length)
$NetStream.Flush()
Write-Host -ForegroundColor Green "Data sent to server"
while($true) {
}
If ($NetStream) { $NetStream.close() }
If ($TCPClient) { $TCPClient.close() }
} catch {
Write-Error $_.Exception.ToString()
Read-Host -Prompt "The above error occurred. Press Enter to exit."
}
}
在我关闭TCPClient之前没有while循环的脚本中,消息被发送到服务器,服务器打印出来没有问题。但是,当我添加while循环时,脚本永远不会实际将消息发送到服务器代码,直到while循环结束。有没有办法获得线
$NetStream.Write($Buffer, 0, $Buffer.Length)
$NetStream.Flush()
在while循环结束之前执行。 Powershell是否有理由在while循环之前而不是之后以正确的顺序执行这些语句?
答案 0 :(得分:0)
我仍然不确定是什么导致Powershell以这种方式行事。如果有人遇到类似的问题,我只需将while循环拉入其自己的函数并调用它就没有问题。