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
我正在通过 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