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);
展开
 我来答
iaskall
2012-08-12 · TA获得超过630个赞
知道小有建树答主
回答量:568
采纳率:83%
帮助的人:239万
展开全部
你重复这两句是什么目的?
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包的包头标志是一样的道理。如果你发送的字符长度是固定的那么也可以不需要设置边界标志了。
zhwh1981
2012-08-12 · 超过91用户采纳过TA的回答
知道小有建树答主
回答量:238
采纳率:0%
帮助的人:77.5万
展开全部
为什么不等发送完毕一次写入呢,
while{bytes>0}
{
recmsg+=Encoding.GetEncoding("GB2312").GetString(recByteMsg, 0, bytes);
bytes = newSocket.Receive(recByteMsg, recByteMsg.Length, 0);

}
Log.PrintLog("FILESERVER-DEBUG","接收数据: "+recMsg);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友4df47a7
2012-08-12 · TA获得超过845个赞
知道答主
回答量:89
采纳率:0%
帮助的人:65.6万
展开全部
建议将中文字符加密,接收时解密。我都是这么做的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式