_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的粘包问题。

    评论

报告相同问题?

悬赏问题

  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘