Windows
將文本字元串發送到 Windows 中的套接字
我有一個伺服器,它有一個打開的套接字,它監聽它上面的特定文本字元串以執行操作。
我們的 linux 機器通過以下方式發送這些數據:
echo "text_string" | nc -w 2 server-name port#
這在 Windows 上是否可行(可能在 powershell 或其他內置實用程序中)?如果是這樣,怎麼做?
這是給你的一個小Powershell……應該與任何版本的PS兼容……也許是PSv2或更好。適用於主機名或 IP 地址。
Function Send-StringOverTcp ( [Parameter(Mandatory=$True)][String]$DataToSend, [Parameter(Mandatory=$True)][String]$Hostname, [Parameter(Mandatory=$True)][UInt16]$Port) { Try { $ErrorActionPreference = "Stop" $TCPClient = New-Object Net.Sockets.TcpClient $IPEndpoint = New-Object Net.IPEndPoint($([Net.Dns]::GetHostEntry($Hostname)).AddressList[0], $Port) $TCPClient.Connect($IPEndpoint) $NetStream = $TCPClient.GetStream() [Byte[]]$Buffer = [Text.Encoding]::ASCII.GetBytes($DataToSend) $NetStream.Write($Buffer, 0, $Buffer.Length) $NetStream.Flush() } Finally { If ($NetStream) { $NetStream.Dispose() } If ($TCPClient) { $TCPClient.Dispose() } } } Send-StringOverTcp -DataToSend 'foo!' -Hostname google.com -Port 80
我寫得非常倉促……您可能想在其中添加額外的參數驗證和錯誤擷取,但您明白了。另外值得考慮的是,Windows 預設使用 UTF16 LE 編碼,因此字元通常是“寬的”,而不是許多其他使用窄字元的系統。因此,您可能希望將字元串編碼為 Unicode 而不是 ASCII 等。取決於您使用它的目的。
或者,如果您想讓它像您的 Netcat 範例一樣簡單,只需…下載適用於 Windows 的 Netcat。