日期:2014-05-20  浏览次数:20646 次

关于socket网络通信对象流,求助。。。
public void run() {
  int jie = 0;
  try {
  BufferedReader br = new BufferedReader(new InputStreamReader(s1.getInputStream()));
  System.out.println(s1.getLocalAddress().toString()+s1.getLocalPort());
  clientIn = new ObjectInputStream(s1.getInputStream()); 
  clientOut = new ObjectOutputStream(s1.getOutputStream());

  while (true) {
  System.out.println("server等待接受信息");
  mes = (ServerMessage) clientIn.readObject();
  System.out.println("server接受到了信息" + mes.getType());
  //处理请求模块
  switch (mes.getType()) {
  case 0://发送大厅信息
  mes.setDating(GameCenterInfo.getGameCenterInfo().getRooms());
  break;
  case 1://创建房间,发送执行结果信息
  jie = GameCenterInfo.getGameCenterInfo().creatRoom(mes.getNewroom());
  mes.setType(jie);
  break;
  case 2://连接指定房间,发送执行结果信息
  jie = GameCenterInfo.getGameCenterInfo().conRoom(mes.getConno());
  mes.setType(jie);
  if (jie == 0) {
  mes.setNewroom(GameCenterInfo.getGameCenterInfo().getConRoom());
  }
  break;
  case 3:
  break;
  default:
  System.out.println("无效的信息包");
  }
  clientOut.writeObject(mes);
  System.out.println("server发送了信息" + mes.getType());
  }
  } catch (Exception e) {
  }
  }
这是我写的处理socket连接客户端的部分代码,在构造体中将客户socket传入,然后run方法在一开始的第四行,读取s1的输入流新建bufferedreadr成功,第五行的ip与端口号也打印的出来,但是第六行就无限卡在这里了,之后的for循环没有进去,也没有报错,就一直卡在这句话上了。。。。
十分不解啊。。。纠结好久了,,,望大神不灵赐教。。


------解决方案--------------------
BufferedReader
用这个很危险,
是带缓冲区的,
有可能多读了数据,放在缓冲区中,
然后,缓冲区中的数据楼主就不管了,
之后,用ObjectInputStream读取IO中的数据去了。