所以我从我的 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
这是由于编码方法吗?我试过不同的,比如 Default
和 UTF8
但它似乎仍然在做同样的事情。
_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/