首页 > 解决方案 > 无法通过 TCP 正确获取文本

问题描述

我知道我的标题不好,但我不知道如何写这个问题。我正在通过 tcp 连接接收 XML,但问题是字符串中充满了“\0”,所以当我使用该字符串变量时,我看不到该消息。我可以做 string.length 并查看它已填充但无法到达文本。我尝试了替换方法并且它有效,但我知道这不是正确的解决方案。所以这是我的问题,我怎样才能正确接收文本?

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”。我找不到原因..一旦我想发回数据,我就会使用替换并再次插入 \0。这可能是因为某种编码吗?我也尝试过 getEncodings 并尝试了许多代码页但不起作用

标签: c#socketstcp

解决方案


我的字符串中的所有“\ 0”都是因为我收到的数据是用 BigEndian 编码的。当我使用

myCompleteMessage += Encoding.BigEndianUnicode.GetString(myReadBuffer, 0, numberOfBytesRead);

一切运作良好。想在这里分享这个,以防有人遇到同样的问题。


推荐阅读