java.io.EOFException问题
publicclasschatserver{publicstaticvoidmain(String[]args){booleanser=false;try{ServerS...
public class chatserver {
public static void main(String[] args) {
boolean ser =false;
try {
ServerSocket ss = new ServerSocket(8888);
ser = true;
while(ser){
boolean datas = false;
Socket s = ss.accept();
datas = true;
DataInputStream w = new DataInputStream(s.getInputStream());
while(datas){
String ha =w.readUTF();//23行
System.out.println(ha);
}
w.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
-------------
java.io.EOFException
at java.io.DataInputStream.readUnsignedShort(Unknown Source)
at java.io.DataInputStream.readUTF(Unknown Source)
at java.io.DataInputStream.readUTF(Unknown Source)
at chatserver.main(chatserver.java:我一关闭客户端 ,这个服务端就出这个错,这代码明明在关了客户端后datas为假啊 ,怎么还继续读 导致异常
23行异常 展开
public static void main(String[] args) {
boolean ser =false;
try {
ServerSocket ss = new ServerSocket(8888);
ser = true;
while(ser){
boolean datas = false;
Socket s = ss.accept();
datas = true;
DataInputStream w = new DataInputStream(s.getInputStream());
while(datas){
String ha =w.readUTF();//23行
System.out.println(ha);
}
w.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
-------------
java.io.EOFException
at java.io.DataInputStream.readUnsignedShort(Unknown Source)
at java.io.DataInputStream.readUTF(Unknown Source)
at java.io.DataInputStream.readUTF(Unknown Source)
at chatserver.main(chatserver.java:我一关闭客户端 ,这个服务端就出这个错,这代码明明在关了客户端后datas为假啊 ,怎么还继续读 导致异常
23行异常 展开
2个回答
展开全部
你这只判断客户连接进来才判断了datas为true 并没有当客户离开时把datas设置为false。
所以datas的值一直都是true。
关闭之后当然会包流不存在的错误。。。
所以datas的值一直都是true。
关闭之后当然会包流不存在的错误。。。
追问
服务端怎么才能知道客户端已经断开,要怎么写?
追答
在服务器端这边写个线程类 当有客户连接进来时,把这个连接交个这个线程执行。
然后在这个线程类里面写try catch , 当catch EOFException的时候说明client已经退出,然后把相应的数据流关闭。就行了...
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询