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行异常
展开
 我来答 举报
a490126994
2013-09-27 · TA获得超过143个赞
知道小有建树答主
回答量:252
采纳率:0%
帮助的人:175万
展开全部
你这只判断客户连接进来才判断了datas为true 并没有当客户离开时把datas设置为false。
所以datas的值一直都是true。
关闭之后当然会包流不存在的错误。。。
追问
服务端怎么才能知道客户端已经断开,要怎么写?
追答
在服务器端这边写个线程类      当有客户连接进来时,把这个连接交个这个线程执行。
然后在这个线程类里面写try catch , 当catch EOFException的时候说明client已经退出,然后把相应的数据流关闭。就行了...
302652034_bai
2013-09-27 · TA获得超过4145个赞
知道大有可为答主
回答量:2206
采纳率:66%
帮助的人:1559万
展开全部
我怎么没有看到你的那个datas在关闭之后有变成false啊?难道看漏了?
抢首赞 已赞过 已踩过<
你对这个回答的评价是?
评论 举报 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式