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中的数据去了。