获取java.io.IOException:在客户端服务器Java套接字程序中激活流
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了获取java.io.IOException:在客户端服务器Java套接字程序中激活流,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2163字,纯文字阅读大概需要4分钟。
内容图文
![获取java.io.IOException:在客户端服务器Java套接字程序中激活流](/upload/InfoBanner/zyjiaocheng/748/fc8be96d0da54d729d594885167ba2c3.jpg)
在我发布这篇文章之前,我查看了有关此例外的一些过去的问题,但找不到确切的答案.
我有一个客户端服务器应用程序,它基本上是一个连接TCP的套接字程序.
在运行正常一段时间之后,我从客户端获得了这个例外.但是,即使它抛出异常,客户端也会向服务器发送数据.(可能是因为Event对象连续传递).但是服务器在接收数据时工作正常.我在发送数据时从客户端获得的异常是
java.io.IOException:stream active ..这发生在下面代码中提到的“LINE 01”中.
这是我使用的客户端代码.
// And "Event" objects are passed continuously to this method one by one.
SocketChannel socketChannel = null;
try {
socketChannel = SocketChannel.open(new InetSocketAddress(host, port));
oos = new ObjectOutputStream(socketChannel.socket().getOutputStream());
oos.reset(); -----------> LINE 01
oos.writeObject(event);
} catch (IOException e) {
throw new RuntimeException(e);
}
这是服务器代码
ServerSocketChannel serverSocketChannel = null;
try {
serverSocketChannel = ServerSocketChannel.open();
serverSocketChannel.socket().bind(new InetSocketAddress(port));
SocketChannel socket = serverSocketChannel.accept();
ObjectInputStream ois = new ObjectInputStream(socket.socket().getInputStream());
do {
Object object = ois.readObject();
if(object instanceof Event) {
Event event = (Event)object ;
viewDetailsInUI(event);
}
} while (true);
这是我从客户端获得的堆栈跟踪.
java.io.IOException: stream active
at java.io.ObjectOutputStream.reset(ObjectOutputStream.java:478)
at org.demo.siddhi.server.EventSenderClient.sendEventToSubscriber(EventSenderClient.java:42)
at org.demo.siddhi.server.query.types.SimpleStockQuoteVWAPQueryProvider$3.callBack(SimpleStockQuoteVWAPQueryProvider.java:344)
at org.siddhi.core.OutputStreamHandler.run(OutputStreamHandler.java:61)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
任何人都可以解释为什么这个?
解决方法:
它似乎相信它已经在序列化一个对象.
IOException if reset() is invoked while serializing an object.
您无需在开始时调用reset(),因为没有任何重置().我会放弃它,它可能工作正常.
如果要定期调用reset,可以在writeObject()之后调用它.
您还应该在缓冲流时调用flush().
内容总结
以上是互联网集市为您收集整理的获取java.io.IOException:在客户端服务器Java套接字程序中激活流全部内容,希望文章能够帮你解决获取java.io.IOException:在客户端服务器Java套接字程序中激活流所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。