博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
socket通信之eofexception
阅读量:6427 次
发布时间:2019-06-23

本文共 1545 字,大约阅读时间需要 5 分钟。

方案一:    用read()将不会抛出异常。因为read是block方式的。    readInt()抛出异常的原因(我遇到的)是对方在该端口没有消息发送。方案二:    socket的端口被阻塞了 ,也就是我们需要更换端口号来解决.方案三:    在初始化链接时,如果先创建输入流,再创建输出流可能会报错,正确创建顺序如下:    ObjectOutputStream   output=new   ObjectOutputStream(socket.getOutputStream());     ObjectInputStream   input=new   ObjectInputStream(socket.getInputStream()); 方案四:从上面的提示可以模糊看到,因为不知道流的末尾,当到达末尾的时候,自然抛出了此异常。既然不知道结尾如何,干脆设一个缓存,然后读取一批数据后输出即可。为了保险期间,可以讲此缓存设置大点,一次可以完全接收到想要的内容,这样,一次就可以读取到所要的内容了,避免了循环获取。下面将此代码放出来:        ......         private static final int BUFFER_SIZE=1024*1024;                  ......         Socket socket = new Socket(cfg.getIp(), Integer.parseInt(SysParamsToolkit.getProperty("socketport")));         String charset = SysParamsToolkit.getProperty("socke.rexml.charset");     //Socket发送的字符集编码         try {                 OutputStream dos = socket.getOutputStream();                 dos.write(xmlcmd.getBytes(charset));                 dos.flush();                 DataInputStream dis = new DataInputStream(socket.getInputStream());                 char[] data = new char[BUFFER_SIZE];                 BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream(), charset));                 int len = br.read(data);                 String rexml = String.valueOf(data, 0, len);        //接收一个字符串数据         } catch (Exception e) {                 return false;         } finally {                 if (socket.isConnected())                         socket.close();         }         ......  经过上面的处理后,就没问题了。 缓存的大小BUFFER_SIZE是根据你要接收内容的大小来确定。

 

转载地址:http://xqyga.baihongyu.com/

你可能感兴趣的文章
NGINX引入线程池 性能提升9倍
查看>>
《淘宝技术这十年》读书笔记 (四). 分布式时代和中间件
查看>>
linux下mongodb定时备份指定的集合
查看>>
oVirt JBAS server start failed, ajp proxy cann't server correct. ovirt-engine URL cann't open
查看>>
CDP WebConsole上线公告
查看>>
ubuntu下安装摄像头应用程序xawtv
查看>>
PostgreSQL 如何比较两个表的定义是否一致
查看>>
Ambari安装Hadoop集群
查看>>
WCF学习之旅—基于ServiceDebug的异常处理(十七)
查看>>
CLREX
查看>>
再也不用担心this指向的问题了
查看>>
使用putty远程连接linux
查看>>
【comparator, comparable】小总结
查看>>
Node 版本管理
查看>>
34、重分布配置实验之分发列表distribute-list
查看>>
命令模式-对象行为型
查看>>
VS2017配置、提高生产力、代码辨识度 (工欲善其事必先利其器)新手必备!
查看>>
[Phoenix] 七、如何使用自增ID
查看>>
路由基本配置(上)
查看>>
windows上传文件到linux乱码解决
查看>>