C# binarywriter 字符串的开始和结束

C# binarywriter start and end of string

我正在通过 TCP 套接字连接发送一个大字符串 0.443+0.064+-0.120+-0.886+0.15167+-0.26754+0.95153

我收到的消息与我发送的字符串不相似。它被随机切割,即 43+0.064+-0.120+-0.886+0.15167+-0.26754+0

如何确保读取完整的字符串?

这是客户端代码:

public static void SendMessage(string message)
{
   if (socketConnection == null)
      {
        return;
      }
   using (BinaryWriter writer = new
   BinaryWriter(socketConnection.GetStream(), Encoding.ASCII, true))
      {
         writer.Flush();
         writer.Write(message);
         writer.Flush();
       }
}

这是我的服务器代码:

private void ListenForIncommingRequests()
{
     tcpListener = new TcpListener(IPAddress.Parse("127.0.0.1"), 8080);
     tcpListener.Start();
     connectedTcpClient = tcpListener.AcceptTcpClient();

     using (BinaryReader reader = new 
     BinaryReader(connectedTcpClient.GetStream()))
     {                   
         while (true)
          {
            string clientMessage = reader.ReadString();
          }
     }
}

正如 @NineBerry 在评论中指出的那样,您正在编写 ASCII 编码字节,但读取的是默认 (Unicode (UTF-16)) 编码字节。确保在两端使用相同的编码,我建议使用 Unicode,因此在实例化 BinaryWriter 时删除 Encoding.ASCII 或在实例化 BinaryWriter 和 BinaryReader

时使用 Encoding.Unicode