【发布时间】:2021-12-31 15:23:06
【问题描述】:
所以我用 C# 创建了一个服务器,它接受一个套接字连接作为 TCP 客户端。
static void Main(string[] args)
{
TcpListener listener = new TcpListener(Address, PORT);
listener.Start();
var client = listener.AcceptTcpClient();
Console.WriteLine("Client has connected!");
while (true)
{
Console.Write("Powershell Command: ");
var cmd = Console.ReadLine();
client.Client.Send(Encoding.ASCII.GetBytes(cmd));
}
}
我正在尝试使用 Powershell 连接到它,它连接得很好。
$tcpConnection = New-Object System.Net.Sockets.TcpClient($args[0], $args[1])
$tcpStream = $tcpConnection.GetStream()
$reader = New-Object System.IO.StreamReader($tcpStream)
$writer = New-Object System.IO.StreamWriter($tcpStream)
$buffer = new-object System.Byte[] 1024
$encoding = new-object System.Text.AsciiEncoding
while ($tcpConnection.Connected)
{
while ($true)
{
$rawresponse = $reader.Read($buffer, 0, 1024)
$rawresponse.Length
$response = $encoding.GetString($buffer, 0, $rawresponse)
Write-Host $response
}
}
$reader.Close()
$writer.Close()
$tcpConnection.Close()
问题是当我从服务器发送消息时,powershell 会打印出来0
所以只有一个 1 和一个空格。即使我发送字符串"Test"
这是为什么呢?以及当我发送时如何正确地打印出字符串"Test"
【问题讨论】:
-
你检查过
$RawResponse吗?那有多个字符吗?它是否包含发送给它的任何字符? -
$RawResponse包含0x04 -
假设你收到一个完整的数据包,是不现实的。
-
@JohnA - 即
4in dec ... 并且似乎与已发送项目的 length 匹配 -Test。这听起来确实像“缓冲区中有 4 个字符”。当您发送“这不是测试”时会发生什么?
标签: c# .net powershell tcp tcpclient