我知道我的头衔不好,但是我不知道该怎么写。我通过TCP连接接收到XML,但是问题是字符串充满了“ \ 0”,所以当我使用该字符串变量时看不到消息。我可以执行string.length并看到它已填充但无法到达文本。我试过了replace方法,它起作用了,但是我知道这不是正确的解决方案。所以这是我的问题,我如何才能正确接收文本?
TcpListener tcpListener = new TcpListener(Convert.ToInt16(_Port));
tcpListener.Start();
while (true)
{
Socket handlerSocket = tcpListener.AcceptSocket();
if (handlerSocket.Connected)
{
Control.CheckForIllegalCrossThreadCalls = false;
NetworkStream networkStream = new NetworkStream(handlerSocket);
byte[] myReadBuffer = new byte[102400000];
int numberOfBytesRead = 0;
string myCompleteMessage = "";
do
{
numberOfBytesRead = networkStream.Read(myReadBuffer, 0, myReadBuffer.Length);
myCompleteMessage += Encoding.UTF8.GetString(myReadBuffer,
}
while (networkStream.DataAvailable);
Console.WriteLine("Text: "+myCompleteMessage);
}
}
我试图将Encoding.UTF8更改为Encoding.ASCII和Encoding.UNICODE,但是没有用。
更新:我的问题仍然存在,我收到的数据在每个字符前都带有“ \ 0”。我找不到原因..一旦我想发回数据,就使用replace并再次插入\ 0。难道是因为某种编码?我也尝试过getEncodings并尝试了许多代码页,但是没有用
答案 0 :(得分:0)
它变成字符串中所有“ \ 0”的原因是,当我使用
时,我收到的数据是使用BigEndian编码的。myCompleteMessage += Encoding.BigEndianUnicode.GetString(myReadBuffer, 0, numberOfBytesRead);
一切正常。希望在这里分享,以防万一有人遇到相同的问题。