_shrimp 2016-03-17 11:43 采纳率: 25%
浏览 2418

java的socket编程问题:为什么客户端接收服务器的数据时会有空白数据项?

例如:03-17 07:02:00.330 1984-2007/? I/info﹕ client buff --> 0/20160316//早餐/123.0
03-17 07:02:00.340 1984-2007/? I/info﹕ insert expend_table
03-17 07:02:00.340 1984-2007/? I/info﹕ client buff -->
03-17 07:02:00.340 1984-2007/? I/info﹕ client buff --> 0/20160316//午餐/22.0
03-17 07:02:00.340 1984-2007/? I/info﹕ insert expend_table
03-17 07:02:00.340 1984-2007/? I/info﹕ client buff -->
03-17 07:02:00.340 1984-2007/? I/info﹕ client buff --> 0/20160316/22ss/服装/123.0

数据内容忽视。client buff是客户端接受到的数据
就是为什么会是一条有数据一条没有数据这样循环下去?
服务端代码:
pw = new PrintWriter(s.getOutputStream());
Cursor c = dbManager.query(Constant.DATA_TABLE,"username=?",new String[]{username});
while (c.moveToNext()){
// client端发送数据的顺序: isIncome + "/" + date + "/" + title + "/" + content + "/" + money
String title = c.getString(c.getColumnIndex("title"));
String money = c.getString(c.getColumnIndex("money"));
Long date = c.getLong(c.getColumnIndex("date"));
String isIncome = c.getString(c.getColumnIndex("isIncome"));
String content = c.getString(c.getColumnIndex("content"));
String data = isIncome + "/" + date + "/" + title + "/" +
content + "/" + money + '\n';
pw.println(data);
pw.flush();
}
String endFlag = username + "/end" + '\n';
pw.println(endFlag);
pw.flush();

客户端代码:
br = new BufferedReader(new InputStreamReader(s.getInputStream()));
String buff;
while (!(buff = br.readLine()).endsWith(mUsername + "/end")) {
// server端发送数据的顺序: isIncome + "/" + date + "/" + title + "/" + content + "/" + money
String[] str = buff.split("/");
if (str.length == 5) { //确保接收的数据正确
ContentValues values = new ContentValues();
values.put("isIncome", str[0]);
values.put("date", Long.valueOf(str[1]));
values.put("title", str[2]);
values.put("content", str[3]);
values.put("money", str[4]);
if ("0".equals(str[0])) {
if (!dbManager.insert(Constant.EXPEND_TABLE, values)) {
flag = false;
break;
}
} else if ("1".equals(str[0])) {
if (!dbManager.insert(Constant.INCOME_TABLE, values)) {
flag = false;
break;
}
}
}
}
db.setTransactionSuccessful();
db.endTransaction();

  • 写回答

3条回答

  • jpbirdy 2016-03-17 12:48
    关注

    不是代码的问题,就可能是原生socket的粘包问题。

    评论

报告相同问题?

悬赏问题

  • ¥50 切换TabTip键盘的输入法
  • ¥15 关于#网络安全#的问题:求ensp的网络安全,不要步骤要完成版文件
  • ¥15 可否在不同线程中调用封装数据库操作的类
  • ¥20 使用Photon PUN2解决游戏得分同步的问题
  • ¥15 微带串馈天线阵列每个阵元宽度计算
  • ¥15 keil的map文件中Image component sizes各项意思
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
  • ¥15 Vue3 大型图片数据拖动排序