c# - 为什么我的编码在解码后添加\0?

标签 c# .net encoding tcp buffer

所以我从我的 TCP 客户端发送一个简单的字符串到我的服务器,然后当我收到它时它解码字节并打印出它得到的内容..但是我正在发送

客户端连接..

我收到了

客户端正在连接..\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0

这是为什么呢? 缓冲区似乎是一样的,18个字节,空的是0 这是由于编码方法吗?我试过不同的,比如 DefaultUTF8 但它似乎仍然在做同样的事情。

    _listener.Start();
    Console.WriteLine("Waiting for connection..");

    //Assign our client the value of the first accepted request.
    _client = _listener.AcceptTcpClient();
    Console.WriteLine("Client connected.");

    //Set the stream to listen for incoming requests.
    _stream = _client.GetStream();

    //Build the package
    byte[] buffer = new byte[128];

    var bufferLength = _stream.Read(buffer, 0, buffer.Length);
    return buffer;

并将字节数组传递给它

    public void SendPacket(byte[] buffer)
            {
                TcpClient client = new TcpClient(hostName, portNum);

                NetworkStream ns = client.GetStream();

                Console.ForegroundColor = ConsoleColor.Cyan;
                Console.WriteLine($"Received from remote client: {Encoding.UTF8.GetString(buffer, 0, buffer.Length)}");
                Console.ForegroundColor = ConsoleColor.Green;
                Console.WriteLine($"Relaying to the remote server: {Encoding.UTF8.GetString(buffer, 0, buffer.Length)}");

                ns.Write(buffer, 0, buffer.Length);

        }

然后

Console.WriteLine("Data Received..");
var data = Encoding.UTF8.GetString(buffer, 0, length);
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine("Received: " + data);

最佳答案

根据你的代码

var bufferLength = _stream.Read(buffer, 0, buffer.Length);
return buffer;

bufferLength 掉在地上。

var data = Encoding.UTF8.GetString(buffer, 0, length);

我不知道 length 从哪里来,但我想这是缓冲区的长度。由于接收没有填满整个缓冲区,而只是其中的一部分,因此您必须使用 bufferLength 来了解要处理的字节数。

同样的问题:

var eh = ns.Read(newBuffer, 0, newBuffer.Length);
var received = Encoding.ASCII.GetString(newBuffer, 0, newBuffer.Length);

使用 eh!

var eh = ns.Read(newBuffer, 0, newBuffer.Length);
var received = Encoding.ASCII.GetString(newBuffer, 0, eh);

关于c# - 为什么我的编码在解码后添加\0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53334510/

相关文章:

Java文件编码从ANSI到UTF8的转换

.net - 使用 ASP.NET 使用 PHP SOAP WebService

c# - Windows 窗体控件 - 巨大的文件名列表

java - Ant 替换任务损坏 UTF-8 文件中的符号

c# - 恢复文本框 C# 的上一个条目

c# - IoC 工厂 : Pros and contras for Interface versus Delegates

php - 土耳其语字符显示不正确

c# - C#访问父对象的方法

c# - 找不到类型或命名空间名称 'ICloudRecoEventHandler'

c# - 使用列表中的字符串创建 DropDownList<string>