内部类BlockDataInputStream.的方法peekByte抛出的异常,意思就是到达了文件的末尾,程序却没有正常结束读取文件内容
Client:
streamToServer.println(userName+";"+strPwd); //向Server发送name与password;
String frmServer = (String)streamFromServer; //Client接收Server返回的信息;
if(frmServer.equals("Welcome"))
{
new ClientInt(userName); //start the chat screen;
this.dispose();
}
Server:
msg = streamFromClient.readLine(); //接收Client的登录信息
int ver = verify(msg); //验证信息从txt文件中读
if(ver==1)
{
String colon = new String(";");
int index = ((String)msg).lastIndexOf(colon);
String userName = (String)msg.substring(0,index);
if(!(vctrList.indexOf((String)userName)>0))
{
streamToClient.writeObject("Welcome");
streamToClient.flush();
vctrList.addElement((String)userName);
}
--------------------------------------------
else //为上过线的用户返回信息
{
streamToClient.writeObject("Welcome");
streamToClient.flush();
}
-------------------------------------------
}
int verify(String mesg)
{
try{
RandomAccessFile RAS = new RandomAccessFile("UserPwd.txt","r");
System.out.println(RAS.getFilePointer()+" "+RAS.length());
RAS.seek(0);
int i = 0;
String str = "";
while(!((RAS.getFilePointer())==(RAS.length()))) //getFilePointer:返回此文件中的当前偏移量。到此文件开头的偏移量(以字节为单位)
{
str = RAS.readLine();
if(str.equals(mesg))
{
System.out.println(RAS.getFilePointer()+" "+RAS.length());
ctr = 1;
break;
}
}//end of while
RAS.close();
}catch(Exception e){
System.out.println("Connect.java verify(String mesg)");
System.out.println("Connect.java 58 Exception Occurred:"+e);
}
return ctr;
}//end of verify()
解决这问题时花费时间很多,这就是经验的问题。引发这异常的问题点是寻到的并解决,可这问题点触发这异常里的过程却还不是很清楚。当Client发送登录信息时,Server接收并验证在验证函verify()中所使用的是RandoAccesFile类进行读取后流关闭。Hashtable vctrList(用于存贮在线用户)是问题的关键,当Client关闭时Server的vrtrList并没有删除对应用户,所以再次登录检验用户时,server端并没有相应的streamToClient.writeObject(),才引发java.io.EOFException。具本为什么这样我也很迷惑,没有相应的返回信息它会返回上一步再次读取登录信息吗?可文件流有关闭呀,且每次读前我都有从新定位的。看来Socket与线程还要好好读读。
分享到:
相关推荐
在本文中,我们将深入探讨如何将RabbitMQ与SpringBoot集成,以实现高效的消息队列系统。RabbitMQ是一款开源的消息代理和队列服务器,它使用AMQP(Advanced Message Queuing Protocol)协议,广泛应用于分布式系统中...
赠送jar包:jetty-io-9.4.43.v20210629.jar; 赠送原API文档:jetty-io-9.4.43.v20210629-javadoc.jar; 赠送源代码:jetty-io-9.4.43.v20210629-sources.jar; 赠送Maven依赖信息文件:jetty-io-9.4.43.v20210629....
项目中碰到的,记录一下解决方案
本次异常的具体描述为:“Communications link failure due to underlying exception: **BEGINNESTED EXCEPTION** java.io.EOFException STACK TRACE: java.io.EOFException at com.mysql.jdbc.MysqlIO.readFully...
Nginx + Websocket 实现推送 , 实现思路 : http://blog.csdn.net/shangmingtao/article/details/76639821 . 代码可以直接线上运行.
在电子商务领域,信用体系的建设至关重要,因为它直接影响到交易的安全性和消费者的信任度。网络交易平台信用体系,简单来说,就是电商平台在政府引导下,与各方参与者共同建立的一套包含法规、评价标准、组织形式和...
- **编译时异常** (`Checked Exception`):这些异常在编译时会被检查,如果方法中可能会抛出此类异常,则必须在方法签名中声明,或者在方法体内通过 try-catch 块处理。 - **运行时异常** (`Runtime Exception`):...
解决Could not load font file: C:\Windows\FONTS\mstmc.ttf 对应问题贴https://blog.csdn.net/guozhangjie1992/article/details/103679640
已经解决了第一次连接报:com.caucho.hessian.client.HessianConnectionException: 500: java.io.EOFException
Flowable是一款强大的、开源的工作流引擎,它基于BPMN 2.0标准,能够帮助企业或组织实现业务流程自动化。BPMN(Business Process Modeling Notation)是一种图形化表示业务流程的方法,它提供了丰富的符号来描绘各种...
EOF,全称Empirical Orthogonal Functions(经验正交函数),是一种数据分析方法,常用于气象学、海洋学和地球物理学等领域,以降维处理和模式识别复杂数据。在Matlab环境中,EOF分析是一种强大的工具,可以帮助研究...
EOF,全称Empirical Orthogonal Functions(经验正交函数),是一种在气象学、海洋学以及地球物理学等领域广泛应用的数据降维和分析方法。它通过找出数据的主要模式,将高维复杂数据转换为少数几个主成分,从而揭示...
EOF,全称End of File(文件结束符),在编程领域中通常用来表示文件或数据流的末尾。但在本场景中,"EOF"是“经验正交函数”(Empirical Orthogonal Functions)的缩写,这是一个在气象学、海洋学和其他地球科学领域...
菜鸟之伤(2):while循环中文件结束符EOF的值 在while循环中,文件结束符EOF的值是-1而不是0。因此,while(scanf(…)!=0)常常会因为死循环而造成TLE。老鸟也常常因为不注意这点而犯错误。 菜鸟之伤(3):while...
在Java编程中,图片处理是一项常见的任务,而`ImageIO`类是Java标准库提供用于读取、写入和操作图像的重要工具。本篇将详细探讨`ImageIO.read()`方法的相关知识点,以及如何解决可能遇到的问题。...
气象统计EOF的MATLAB程序,可以直接使用,比较容易看懂的
yarn-v0.23.2.tar.gz 在安装ambari,源码编译的时候下载的文件有问题 手动下载 地址 https://github.com/yarnpkg/yarn/releases/download/v0.23.2/yarn-v0.23.2.tar.gz