大家帮忙看下怪异的出错(关于对象流的用法)

fafuhefan 2008-10-05 12:57:06

先看下线程的代码:
public void run() {

Public.map.put(this.getId() + "", this);
Object obj;
QQPack pack;
MessageType packType;

while (true) {

try {
oos = new ObjectOutputStream(socket.getOutputStream());
ois = new ObjectInputStream(socket.getInputStream());
obj = ois.readObject();
if (obj instanceof QQPack) {

pack = (QQPack) obj;
packType = pack.getType();

if (packType == MessageType.Login) {
User user = pack.getFrom();
ImDao dao = new ImDao();

User user2 = dao.checkUser(user.getId(), user
.getPassword());

if (user2.getId().equals(user.getId())) {

pack = new QQPack();
pack.setType(MessageType.Login_Success);
pack.setFrom(user2);
sendMessage(pack);

Public.map.put(user.getId(), this); // 验证成功后把id和对应的线程保存到map中,

} else {
pack = new QQPack();
pack.setType(MessageType.Login_Fail);
sendMessage(pack);
}

} else if (packType == MessageType.Logout) {

}
...全文
122 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuhua205 2008-10-08
  • 打赏
  • 举报
回复
还是放在里面吧!
dujun3245350 2008-10-08
  • 打赏
  • 举报
回复
接分
Sniper_Killer 2008-10-07
  • 打赏
  • 举报
回复
放在外边也要捕获异常的。写在外边为好。仔细调查一下。
sunyujia 2008-10-05
  • 打赏
  • 举报
回复
应该放在外边如果报错是你的流程写错了
放里面也是没错的,因为它获取的是流对象的引用,

从深层次意义上来讲只是重新获取了下流的对象的内存地址,所以也是没关系的,不过建议你再执行看看
从错误上看是违法了一致性检查,可能你的线程有问题。
fafuhefan 2008-10-05
  • 打赏
  • 举报
回复
当我把此二句代码:oos = new ObjectOutputStream(socket.getOutputStream());
ois = new ObjectInputStream(socket.getInputStream());
放在循环外面时,客户端登陆时,服务器就抛出异常:java.io.StreamCorruptedException;
放在循环里面时,正常登陆,这好像也是出错的吧,这样不就一直套对象流的头吗,怎么还能读取出来?

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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