繁体   English   中英

添加While循环后的Powershell脚本代码执行问题

[英]Powershell Scripting Code Execution Issue After Adding a While Loop

我正在尝试编写一个Powershell脚本来与某些Java服务器代码进行通信。 该脚本调用以下函数与服务器进行通信,并且当前服务器仅在打印出收到的消息。

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循环之前而不是在while循环之后以正确的顺序执行这些语句?

我仍然不确定是什么导致Powershell采取这种方式。 万一有人遇到类似的问题,我可以通过仅将while循环拉入它自己的函数并毫无问题地调用它来解决此问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM