求救:java.net.SocketException Broken pipe

redman2001 2007-04-24 03:28:40
好好的socket通讯程序, 从window 移入 linux 操作系统中,仅仅和服务器交换几条简单的数据后,报 java.net.SocketException Broken pipe 异常,甚是奇怪 ,在网上找到了很多 同类的问题包括答案,似乎没有一个能解决问题的。

我排出一些可能的情况,
1、连接从来没有断开;
2、交易数据量少,不存在超时问题,而且是长连接;
3、在输入,输出流中进行了同步。
4、在window 上运行了1年多了。从来没出过类似问题

部分错误信息如下:
java.net.SocketException: Broken pipe
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
at java.io.ObjectOutputStream$BlockDataOutputStream.drain(ObjectOutputStream.java:1639)
at java.io.ObjectOutputStream$BlockDataOutputStream.flush(ObjectOutputStream.java:1584)
at java.io.ObjectOutputStream.reset(ObjectOutputStream.java:639)



这个困扰我多个星期的 问题,希望能得到各位高人的帮助,以解我燃眉之急,
在这我先谢谢各位了。
...全文
5994 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
asdfgcjw 2012-06-12
  • 打赏
  • 举报
回复
太纠结了
cky334455 2011-06-16
  • 打赏
  • 举报
回复
当管道的写入端在运行是时,而读入端关闭了,就会引发这样的错误。。
lin1658 2011-06-08
  • 打赏
  • 举报
回复
每天回帖即可获得10分可用分!
Still_Waters 2010-01-25
  • 打赏
  • 举报
回复
还能当没有看见?!
langke93 2008-10-10
  • 打赏
  • 举报
回复
两年了,习惯了,也没什么影响,就当没看见吧
gxwaa 2007-04-28
  • 打赏
  • 举报
回复
学习中.......顶!!!!!!
lixiaoxue85 2007-04-27
  • 打赏
  • 举报
回复
用NIO重写下SOCKET这块吧 是个不错的选择
redman2001 2007-04-27
  • 打赏
  • 举报
回复
发布好多天,被它折磨好长时间了,救命呀,各位高人该出手了吧。等你等得我好辛苦呀。
zouxinfox 2007-04-26
  • 打赏
  • 举报
回复
To zoeg(沉香) ,
我看了你的帖子,具体我没试过,但“java网络编程”这本书的对异步IO讲解中有句话“在chanrgen协议中,服务器永远不会关闭连接。它等待客户端中断socket。当socket中断时,会抛出异常,取消这个键,关闭对应通道”。你可以试试
zouxinfox 2007-04-26
  • 打赏
  • 举报
回复
我一个小时前也遇到了同样问题,辛辛苦苦编的程序在windows上运行正常,在linux上就broken pipe了。不过我是单线程也出现了同样问题,是flush()时发生异常
redman2001 2007-04-25
  • 打赏
  • 举报
回复
焦急呀,各位来看贴,回帖呀!!!在线等待呀!静候佳音
redman2001 2007-04-25
  • 打赏
  • 举报
回复
jianhlijun(jianhlijun)

你的长连接
linux 对超过时间不连接的长连接会踢掉的
在linux 里面有设置

请问如何设置呢?
zoeg 2007-04-25
  • 打赏
  • 举报
回复
在Unix/Linux下的网络结构和windows略有不同,至少在java的网络编程上有一些差异(没有考证,只是自己曾经遇到相同的问题!)
引起java.net.SocketException:Broken pipe这个异常的原因是你使用了多个线程同时对一个Socket通道进行读/写(windows环境没有这个问题),简单的说就是Unix/Linux下不能同时对一个Socket通道进行读和写。并且我也尝试过使用同步控制来防止对同一个Socket通道进行读和写,不过只是降低了该异常的发生概率(绝对不是同步控制有问题),发送和接收加入一段延迟后不会发生该问题,当然应用是不能容忍这样的处理效率和性能的。
最后我把整个网络通信改成用new io的非阻塞模式,在单线程中处理多路通道,没有这个问题,而且似乎系统吞吐量比先前更高了,不过唯一剩下一个问题,至今仍未解决!
详见我的问题贴:
http://community.csdn.net/Expert/topic/5385/5385219.xml?temp=.1896173
jianhlijun 2007-04-24
  • 打赏
  • 举报
回复
捕捉SocketException异常
将连接关闭
创建一个新的连接 应该就可以了
lixiaoxue85 2007-04-24
  • 打赏
  • 举报
回复
4、在window 上运行了1年多了。从来没出过类似问题
觉得就是LINUX系统的原因了,你换下别的版本的LINUX系统看看
不同之间的差异还是比较大的
jianhlijun 2007-04-24
  • 打赏
  • 举报
回复
你的长连接
linux 对超过时间不连接的长连接会踢掉的
在linux 里面有设置
redman2001 2007-04-24
  • 打赏
  • 举报
回复
论坛的高人过来看看呀,我在线等待。 多谢各位了
brooksychen 2007-04-24
  • 打赏
  • 举报
回复
帮顶
关注中~~

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧