android udp程序接收pc机发送的中文汉字显示不全问题

w22net 2016-12-19 10:53:02
如下代码接收汉字 是最后两个汉字不能正常显示,比如“中华人民” 只能显示“中华” “人民” 不能显示,该如何处理?
//接收代码
private Runnable mRunnableSMS = new Runnable() {
public void run() {
while (true) {
try {

// 读取Socket中的数据,读到的数据放在inPacket所封装的字节数组里。
socketSMS.receive(inPacketSMS);
strReceive = new String(inBuffSMS, 0,
inPacketSMS.getLength(), "gb2312");
// Toast.makeText(ctx, str, Toast.LENGTH_SHORT).show();
Log.e(DEBUG_TAG,
new String(inBuffSMS, 0, inPacketSMS.getLength()));
mHandlerSMS.sendMessage(mHandlerSMS.obtainMessage());
} catch (Exception e) {
Log.e(DEBUG_TAG, e.toString());
}
}
}
};
//显示代码
Handler mHandlerSMS = new Handler() {
public void handleMessage(Message msg) {
super.handleMessage(msg);
// 刷新
try {
// ctx.textViewInfo.setText(strReceive) ;
//ctx.textViewInfo.append(strReceive);
ctx.editTextRXSMS.append(strReceive);

} catch (Exception e) {
Log.e(DEBUG_TAG, e.toString());
}
}
};


...全文
195 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
w22net 2016-12-21
  • 打赏
  • 举报
回复
多谢回复,原因找到是因为发的不全,一个汉字两个字节,发送时只发了一个,长度少了。
northwesternwind 2016-12-20
  • 打赏
  • 举报
回复
引用 1 楼 northwesternwind 的回复:
socketSMS.receive返回,并不意味着你接收了全部的数据。 简单的做法就是先检查收到的字节数,不够的话继续接收。 复杂的就需要双方
抱歉没有写完。 socketSMS.receive返回,并不意味着你接收了全部的数据。 简单的做法就是先检查收到的字节数,不够的话继续接收。 复杂的就需要双方约定应用层协议。比如发送方先发送一个或者多个字节的消息长度,然后发送消息。接收放首先按照固定长度接收消息长度,然后按照长度接收后面的消息数据。
northwesternwind 2016-12-20
  • 打赏
  • 举报
回复
socketSMS.receive返回,并不意味着你接收了全部的数据。 简单的做法就是先检查收到的字节数,不够的话继续接收。 复杂的就需要双方

80,349

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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