首页 > 解决方案 > WriteLineAsync 或 ReadAsync 无法读取 TCP Communicator C# 的字符串

问题描述

我正在创建一个 TCP 服务器/客户端以使用多线程相互通信,但我无法让服务器正确读取客户端发送的字符串。例如,我将字符串“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);

            }
        }

标签: c#asynchronoustcpclienttcplistener

解决方案


尝试

WriteToConsole("Received " + System.Text.Encoding.ASCII.GetString(buf), 0);

反而

     WriteToConsole("Received " + stream.ToString(), 0);

推荐阅读