udp通信丢失汉字

a19891117 2010-12-22 02:27:25
如我发送10个汉字 接收方只能收到3个汉字

请问各位大哥 有知道问题的吗?
...全文
117 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuyq11 2010-12-22
  • 打赏
  • 举报
回复
传输的都是字节
使用握手的方式,确保上包数据已发送到,可以再次发送。
发送失败后重发
检查编码Encoding.Unicode.GetBytes
大黄鸭在发光 2010-12-22
  • 打赏
  • 举报
回复
这样写试试,应该没有问题的。
byte[] b = Encoding.Unicode.GetBytes(s);//s是string字符串,可以是中文。
发送
接收
string s = Encoding.Unicode.GetString(接收到的byte数组);
a19891117 2010-12-22
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wuyazhe 的回复:]
跟汉字无关,通讯丢数据正常,你如果没有协议控制,那数据丢了无法确定的,有协议的话,哪包错了就请求重发。保证数据的通畅,然后才考虑数据的逻辑(数字,字母,汉字的明文或其他意义。)
[/Quote]

就汉字才会丢
JiuchunYoung 2010-12-22
  • 打赏
  • 举报
回复
Encoding.Default.GetBytes(content)
打包成二进制看看

或者是你的字符转换存在问题

还有就是丢包了
a19891117 2010-12-22
  • 打赏
  • 举报
回复
msgToSend.cmdCommand = Command.Message;//消息
byte[] byteData = msgToSend.ToByte();


public byte[] ToByte()
{
List<byte> result = new List<byte>();
//First four are for the Command
result.AddRange(BitConverter.GetBytes((int)cmdCommand));
//Add the length of the name
if (strName != null)
result.AddRange(BitConverter.GetBytes(strName.Length));
else
result.AddRange(BitConverter.GetBytes(0));
//Length of the message
if (strMessage != null)
result.AddRange(BitConverter.GetBytes(strMessage.Length+100));
else
result.AddRange(BitConverter.GetBytes(0));
//Add the name
if (strName != null)
result.AddRange(Encoding.GetEncoding(936).GetBytes(strName));
//And, lastly we add the message text to our array of bytes
if (strMessage != null)
// result.AddRange(Encoding.GetEncoding("gb2312").GetBytes(strMessage));
result.AddRange(Encoding.GetEncoding(936).GetBytes(strMessage+" "));
return result.ToArray();
}

我转换编码
兔子-顾问 2010-12-22
  • 打赏
  • 举报
回复
跟汉字无关,通讯丢数据正常,你如果没有协议控制,那数据丢了无法确定的,有协议的话,哪包错了就请求重发。保证数据的通畅,然后才考虑数据的逻辑(数字,字母,汉字的明文或其他意义。)
a19891117 2010-12-22
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wangyue4 的回复:]
你发10个汉字不过才20字节。必然是放在一个包中发过去。要丢也是整个包没收到。
怎么会发10个字,就丢7个。LZ是不是转换编码有问题,只转了6个字节。
[/Quote]
我也觉得是 不过我看了好就没觉得有什么问题
deepmist 2010-12-22
  • 打赏
  • 举报
回复
你可以把这个消息打包成二进制数据传输,对方客户端再拆包转换

Encoding.Default.GetBytes(content)
大黄鸭在发光 2010-12-22
  • 打赏
  • 举报
回复
你发10个汉字不过才20字节。必然是放在一个包中发过去。要丢也是整个包没收到。
怎么会发10个字,就丢7个。LZ是不是转换编码有问题,只转了6个字节。
a19891117 2010-12-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 mjp1234airen4385 的回复:]
udp本来就要丢失数据的,不然就叫tcp了。
你想不丢数据就是用tcp好了。

不过你发10个字,就丢7个,好像也没有这么的严重。
[/Quote]

我知道UDP 会丢包,但是好像不是这个问题,我发英文字字母都没有丢过
mjp1234airen4385 2010-12-22
  • 打赏
  • 举报
回复
udp本来就要丢失数据的,不然就叫tcp了。
你想不丢数据就是用tcp好了。

不过你发10个字,就丢7个,好像也没有这么的严重。
a19891117 2010-12-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 luxiaodongly 的回复:]
一般来说 网络不是很卡 应该不会。你可以在本机 通过UDP传输。看看会不会有你这个现象
[/Quote]
一样的
luxiaodongly 2010-12-22
  • 打赏
  • 举报
回复
一般来说 网络不是很卡 应该不会。你可以在本机 通过UDP传输。看看会不会有你这个现象
luxiaodongly 2010-12-22
  • 打赏
  • 举报
回复
为什么会这样?

111,100

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧