写一个通讯程序出现出现错误 java.io.EOFException错误

simpleact 2014-04-05 01:00:05
/*
* 这是服务器,它在监听,等待某个客户端来连接
*/
package com.qq.server.model;
import java.io.*;
import java.net.*;
import java.util.*;


import com.qq.common.*;
public class QQServer{
public QQServer(){
System.out.println("我是服务器,在9999号端口监听,,,");
ServerSocket ss;
try {
ss = new ServerSocket(9999);
while(true){
Socket s=ss.accept();
ObjectOutputStream oos=new ObjectOutputStream(s.getOutputStream());
ObjectInputStream ois=new ObjectInputStream(s.getInputStream());
User u=(User)ois.readObject();
System.out.println("服务器接收到用户ID "+u.getUserId()+" 密码 "+u.getPassword());
Message m=new Message();
if(u.getPassword().equals("123456")){
m.setMesType("1");
oos.writeObject(m);
ServerClientThread sct=new ServerClientThread(s);
System.out.println("创建线程");
sct.start();
}else{
m.setMesType("2");
oos.writeObject(m);
s.close();
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
==============================================================
/*
* 功能:是服务器和某个客户端的通信线程
*/
package com.qq.server.model;
import java.net.*;
import java.io.*;
import com.qq.common.*;
public class ServerClientThread extends Thread{
Socket s;
public ServerClientThread(Socket s){
this.s=s;
}
public void run(){
//该线程可以接受客户端的信息
while(true){
try {
ObjectInputStream ois=new ObjectInputStream(s.getInputStream());
Message m=(Message)ois.readObject();
System.out.println(m.getSender()+" "+m.getGetter()+" "+m.getCon()+" "+m.getSendTime());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
break;
}
}
}
}
为什么会出现错误:
java.io.EOFException
at java.io.ObjectInputStream$PeekInputStream.readFully(Unknown Source)
at java.io.ObjectInputStream$BlockDataInputStream.readShort(Unknown Source)
at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
at java.io.ObjectInputStream.<init>(Unknown Source)
at com.qq.server.model.ServerClientThread.run(ServerClientThread.java:17)




ObjectInputStream ois=new ObjectInputStream(s.getInputStream());这一句哪儿错了
...全文
2352 7 打赏 收藏 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuhouqingchen_2648 2014-06-06
  • 打赏
  • 举报
回复
引用 5 楼 huxiweng 的回复:
流没有正常到结束。一般出现这个情况是由于流中途断开了,即网络断开或者是被人为断开
嗯,这个是因为阻塞引起的,因为server的input.read读不到东西就会阻塞,当你关掉client的时候,server就知道没有东西进来了,所以就报了个异常,其实这个是正常的,只是告诉你,该把socket关闭一下,还有input也关闭一下。 这个是正确的。。。
yuhouqingchen_2648 2014-06-06
  • 打赏
  • 举报
回复
引用 5 楼 huxiweng 的回复:
流没有正常到结束。一般出现这个情况是由于流中途断开了,即网络断开或者是被人为断开
错。。。。正常读readObject到结尾后循环多读一次就是这个错误
teemai 2014-04-05
  • 打赏
  • 举报
回复
流没有正常到结束。一般出现这个情况是由于流中途断开了,即网络断开或者是被人为断开
-江沐风- 2014-04-05
  • 打赏
  • 举报
回复
这个异常表示:当输入过程意外达文件或流末尾时抛出此异常;
-江沐风- 2014-04-05
  • 打赏
  • 举报
回复
teenth 2014-04-05
  • 打赏
  • 举报
回复
客户端呢,客户端应该有服务器的端口和IP吧
simpleact 2014-04-05
  • 打赏
  • 举报
回复
大神呢。。。。。。。

62,620

社区成员

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

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