WriteLineAsync 或 ReadAsync 无法读取 TCP Communicator C# 的字符串
WriteLineAsync or ReadAsync unable to read string for TCP Communicator C#
我正在创建一个 TCP Server/Client 以使用多线程相互通信,但我无法让服务器正确读取我的客户端发送的字符串。例如,我将字符串“testing”从客户端发送到服务器。在服务器控制台上,它显示为“Received System.Net.Sockets.NetworkStream”。我已经坚持了几个小时,我不知道如何处理这种情况。非常感谢任何帮助。
TLDR:服务器和客户端可以相互通信,但服务器无法正确读取客户端发送的字符串。
服务器代码:
async Task EchoAsync(TcpClient client, CancellationToken ct)
{
var buf = new byte[4096];
var stream = client.GetStream();
while (!ct.IsCancellationRequested)
{
var amountRead = await stream.ReadAsync(buf, 0, buf.Length, ct);
WriteToConsole("Received " + stream.ToString(), 0);
if (amountRead == 0)
{
break; // End of stream
}
await stream.WriteAsync(buf, 0, amountRead, ct);
}
}
客户代码:
private async void ClientToServerMsg_btn_Click(object sender, RoutedEventArgs e)
{
using (var NetworkStream = clientSocket.GetStream())
using (var writer = new StreamWriter(NetworkStream))
{
//writer.AutoFlush = true;
WriteToConsole("Writing to server...", 1);
await writer.WriteLineAsync(ClientToServerMsg.Text);
}
}
尝试
WriteToConsole("Received " + System.Text.Encoding.ASCII.GetString(buf), 0);
改为
WriteToConsole("Received " + stream.ToString(), 0);
我正在创建一个 TCP Server/Client 以使用多线程相互通信,但我无法让服务器正确读取我的客户端发送的字符串。例如,我将字符串“testing”从客户端发送到服务器。在服务器控制台上,它显示为“Received System.Net.Sockets.NetworkStream”。我已经坚持了几个小时,我不知道如何处理这种情况。非常感谢任何帮助。
TLDR:服务器和客户端可以相互通信,但服务器无法正确读取客户端发送的字符串。
服务器代码:
async Task EchoAsync(TcpClient client, CancellationToken ct)
{
var buf = new byte[4096];
var stream = client.GetStream();
while (!ct.IsCancellationRequested)
{
var amountRead = await stream.ReadAsync(buf, 0, buf.Length, ct);
WriteToConsole("Received " + stream.ToString(), 0);
if (amountRead == 0)
{
break; // End of stream
}
await stream.WriteAsync(buf, 0, amountRead, ct);
}
}
客户代码:
private async void ClientToServerMsg_btn_Click(object sender, RoutedEventArgs e)
{
using (var NetworkStream = clientSocket.GetStream())
using (var writer = new StreamWriter(NetworkStream))
{
//writer.AutoFlush = true;
WriteToConsole("Writing to server...", 1);
await writer.WriteLineAsync(ClientToServerMsg.Text);
}
}
尝试
WriteToConsole("Received " + System.Text.Encoding.ASCII.GetString(buf), 0);
改为
WriteToConsole("Received " + stream.ToString(), 0);