C# SOCKET程序,中文乱码情况 10
服务器每次发送的数据大小为512,但是最后如果为中文字符,服务器可能将中文的第一个字符发过来,第二个字符只能通过下一次传输数据时发送过来。也就导致我在本次进行数据交互时会...
服务器每次发送的数据大小为512,但是最后如果为中文字符,服务器可能将中文的第一个字符发过来,第二个字符只能通过下一次传输数据时发送过来。也就导致我在本次进行数据交互时会产生中文乱码的情况。能帮我看一下,有什么办法解决吗?我每次接收到数据都要写入文件。
String recMsg = "";
byte[] recByteMsg = new byte[512];
int bytes;
bytes = newSocket.Receive(recByteMsg, recByteMsg.Length, 0);
recMsg = Encoding.GetEncoding("GB2312").GetString(recByteMsg, 0, bytes);
bytes = newSocket.Receive(recByteMsg, recByteMsg.Length, 0);
recMsg = Encoding.GetEncoding("GB2312").GetString(recByteMsg, 0, bytes);
Log.PrintLog("FILESERVER-DEBUG","接收数据: "+recMsg); 展开
String recMsg = "";
byte[] recByteMsg = new byte[512];
int bytes;
bytes = newSocket.Receive(recByteMsg, recByteMsg.Length, 0);
recMsg = Encoding.GetEncoding("GB2312").GetString(recByteMsg, 0, bytes);
bytes = newSocket.Receive(recByteMsg, recByteMsg.Length, 0);
recMsg = Encoding.GetEncoding("GB2312").GetString(recByteMsg, 0, bytes);
Log.PrintLog("FILESERVER-DEBUG","接收数据: "+recMsg); 展开
3个回答
展开全部
你重复这两句是什么目的?
bytes = newSocket.Receive(recByteMsg, recByteMsg.Length, 0);
recMsg = Encoding.GetEncoding("GB2312").GetString(recByteMsg, 0, bytes);
bytes = newSocket.Receive(recByteMsg, recByteMsg.Length, 0);
recMsg = Encoding.GetEncoding("GB2312").GetString(recByteMsg, 0, bytes);
如果你采用阻塞模式无须重复这样写啊,当然阻塞模式可能出现粘包问题
我们一般采用发送端设置边界标示,根据标示在接受端来区分上下包,这和IP包的包头标志是一样的道理。如果你发送的字符长度是固定的那么也可以不需要设置边界标志了。
bytes = newSocket.Receive(recByteMsg, recByteMsg.Length, 0);
recMsg = Encoding.GetEncoding("GB2312").GetString(recByteMsg, 0, bytes);
bytes = newSocket.Receive(recByteMsg, recByteMsg.Length, 0);
recMsg = Encoding.GetEncoding("GB2312").GetString(recByteMsg, 0, bytes);
如果你采用阻塞模式无须重复这样写啊,当然阻塞模式可能出现粘包问题
我们一般采用发送端设置边界标示,根据标示在接受端来区分上下包,这和IP包的包头标志是一样的道理。如果你发送的字符长度是固定的那么也可以不需要设置边界标志了。
展开全部
为什么不等发送完毕一次写入呢,
while{bytes>0}
{
recmsg+=Encoding.GetEncoding("GB2312").GetString(recByteMsg, 0, bytes);
bytes = newSocket.Receive(recByteMsg, recByteMsg.Length, 0);
}
Log.PrintLog("FILESERVER-DEBUG","接收数据: "+recMsg);
while{bytes>0}
{
recmsg+=Encoding.GetEncoding("GB2312").GetString(recByteMsg, 0, bytes);
bytes = newSocket.Receive(recByteMsg, recByteMsg.Length, 0);
}
Log.PrintLog("FILESERVER-DEBUG","接收数据: "+recMsg);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
建议将中文字符加密,接收时解密。我都是这么做的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询