c# - 无法通过 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 并尝试了许多代码页但不起作用
解决方案
我的字符串中的所有“\ 0”都是因为我收到的数据是用 BigEndian 编码的。当我使用
myCompleteMessage += Encoding.BigEndianUnicode.GetString(myReadBuffer, 0, numberOfBytesRead);
一切运作良好。想在这里分享这个,以防有人遇到同样的问题。
推荐阅读
- python - 为什么打印语句运行两次?
- mpi - MPI_Wait 给出不好的结果
- c# - WPF TreeView 绑定命令并传递单击了哪个元素
- java - 检查拼字游戏单词列表中的确切单词
- php - 使用 Laravel Eloquent 使用复合键更新表
- python - How to get the object from PostgreSQL DB of the logged in user with a querySet in Django?
- f# - 如何在不暴露其异步依赖关系的情况下将函数类型公开为业务需求?
- haskell - 如何在不重复自己的情况下使该算法更懒惰?
- swift - 使用 AVMutableComposition 将音轨合并到单个轨道中
- django-rest-framework - 我们可以将 Django GraphQL JWT 用于身份验证,还可以将 Django REST 框架用于其他 API 吗?