Назад | Перейти на главную страницу

Отправить текстовую строку в сокет в 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, просто ... скачайте Netcat для Windows.

ты можешь использовать PuTTY для этого выберите вариант прямого подключения. Telnet также может работать для вас

порт сервера Telnet