无法通过TCP正确获取文本

时间:2018-07-06 06:31:19

标签: c# sockets tcp

我知道我的头衔不好,但是我不知道该怎么写。我通过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并尝试了许多代码页,但是没有用

1 个答案:

答案 0 :(得分:0)

它变成字符串中所有“ \ 0”的原因是,当我使用

时,我收到的数据是使用BigEndian编码的。
myCompleteMessage += Encoding.BigEndianUnicode.GetString(myReadBuffer, 0, numberOfBytesRead);

一切正常。希望在这里分享,以防万一有人遇到相同的问题。