java.net.SocketException: Broken pipe


生产上遇到一个问题,socket发生Broken pipe错误,如下

这个问题跟踪了好几个月,始终没有模拟出为什么会发生Broken pipe。最后发现,是客户端设置了超时时间setSoTimeout,也是神坑。

下面的例子可以完整的还原出Broken Pipe错误,请在linux底下运行。

Client:

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket; public class Client { public static void main(String[] args) {
Socket s = null;
try {
s = new Socket("127.0.0.1", 3113);
s.setSoTimeout(5000); DataOutputStream out = new DataOutputStream(
s.getOutputStream()); //client->server
out.write("1111 from client".getBytes()); // server->client
DataInputStream in = new DataInputStream(s.getInputStream());
byte[] bytes = new byte[1024];
int len = in.read(bytes); System.out.println("client:" + new String(bytes, 0, len)); out.write("2222 from client".getBytes()); } catch (Exception e) {
e.printStackTrace();
} finally {
if (s != null) {
try {
s.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}

Server:

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket; public class Server { public static void main(String[] args) {
try {
ServerSocket ss = new ServerSocket(3113);
Socket s = ss.accept();
//client->server
DataInputStream is = new DataInputStream(s.getInputStream());
byte[] buf =new byte[1024];
int len = is.read(buf);
System.out.println("recv:"+new String(buf,0,len)); Thread.sleep(10000); //server->client
s.getOutputStream().write("1111 server".getBytes()); //client->server
DataInputStream in = new DataInputStream(s.getInputStream());
byte[] bytes = new byte[1024];
int length = in.read(bytes); try {
System.out.println("recv2:"+new String(bytes,0,length));
} catch (Exception e) {
e.printStackTrace(); System.out.println("--------------"); DataOutputStream out = new DataOutputStream(s.getOutputStream());
try {
out.write("error write ".getBytes());
} catch (IOException e1) {
System.out.println("==============================");
e1.printStackTrace();
}
} }catch (Exception e){
System.out.println(e.getStackTrace());
e.printStackTrace();
}
}
}

java.net.SocketException: Broken pipe的更多相关文章

  1. java.net.SocketException: Broken pipe 异常可能的原因

    org.apache.catalina.connector.ClientAbortException: java.net.SocketException: Broken pipe at org.apa ...

  2. Caused by: java.net.SocketException: Broken pipe

    异常信息 时间:2017-03-24 17:22:16,719 - 级别:[ WARN] - 消息: [other] The web application [ROOT] appears to hav ...

  3. redis报错:java.net.SocketException: Broken pipe (Write failed); nested exception is redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketException: Broken pipe (Write failed)

    最近写了一个服务通过springboot构建,里面使用了redis作为缓存,发布到服务器运行成功,但是有时候会报redis的错误:org.springframework.data.redis.Redi ...

  4. JedisConnectionException: java.net.SocketException: Broken pipe (Write failed) 问题排查

    问题描述 笔者有2个应用会不定时请求redis,其中一个应用大约每分钟请求一次,可以正常请求,但是另一个大约每小时请求一次的应用,经常出现Broken pipe (Write failed)报错,具体 ...

  5. Jedis Unexpected end of stream & java.net.SocketException: Broken pipe问题解决思路

    笔者一直维护的稳定基础服务测试环境不稳定了,这能忍!盘他,虽然不一定能完全盘的了. 背景: hrexternal 基础服务对外提供公司员工获取的多个接口,很多接口访问频率比较高,加了缓存,使用的是re ...

  6. solr报错 ERROR SolrDispatchFilter null:ClientAbortException: java.net.SocketException: Broken pipe 原因是nginx截断了请求

    [root@localhost nginx]# lltotal 36drwx------. 2 www root 4096 Aug 13 13:25 client_body_tempdrwxr-xr- ...

  7. 线上问题!----------org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe

    1.问题出现 昨晚项目在上线的时候因为推广的原因,新增的大量请求.在八点的时候. org.apache.catalina.connector.ClientAbortException: java.io ...

  8. java.io.IOException 断开的管道 解决方法 ClientAbortException: java.io.IOException: Broken pipe

    今天公司技术支持的童鞋报告一个客户的服务不工作了,紧急求助,于是远程登陆上服务器排查问题. 查看采集数据的tomcat日志,习惯性的先翻到日志的最后去查看有没有异常的打印,果然发现了好几种异常信息,但 ...

  9. 控制台(Console)报错:java.io.IOException: Broken pipe

    控制台(Console)输出: java.io.IOException: Broken pipe at sun.nio.ch.FileDispatcherImpl.write0(Native Meth ...

随机推荐

  1. python模块-json、pickle、shelve

    json模块 用于文件处理时其他数据类型与js字符串之间转换.在将其他数据类型转换为js字符串时(dump方法),首先将前者内部所有的单引号变为双引号,再整体加上引号(单或双)转换为js字符串:再使用 ...

  2. linux 之awk命令详解

    awk是一种程序语言,对文档资料的处理具有很强的功能.awk名称是由它三个最初设计者的姓氏的第一个字母而命名的: Alfred V. Aho.Peter J. We i n b e rg e r.Br ...

  3. 在函数后面加上const

    1.现象 在c++类中,有些成员函数在声明时,后面加了const,如 2.作用 ①.提高程序可读性,可以一眼看出此函数不能修改类成员变量: ②.提高程序可靠性,此函数试图修改成员变量时,编译器会通不过

  4. MIMO雷达比幅单脉冲测角精度分析(系统工程与电子技术)

    MIMO雷达比幅单脉冲测角精度分析(系统工程与电子技术)

  5. POJ 3630 Phone List(字符串前缀重复)题解

    Description Given a list of phone numbers, determine if it is consistent in the sense that no number ...

  6. /etc/profile、/etc/bashrc、~/.bash_profile、~/.bashrc 文件的作用

     转载自:http://blog.csdn.net/u013968345/article/details/21262033 /etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登 ...

  7. 第十四章 数字签名算法--RSA

    注意:本节内容主要参考自 <Java加密与解密的艺术(第2版)>第9章“带密钥的消息摘要算法--数字签名算法” <大型分布式网站架构(设计与实践)>第3章“互联网安全架构” 1 ...

  8. Vue开发中的中央事件总线

    在Vue开发中会遇到大量的组件之间共享数据的情形,针对不同的情形,Vue有相对应的解决方案.比如,父组件向子组件传值可以使用props,复杂项目中不同模块之间传值可以使用Vuex.但是,对于一些简单的 ...

  9. faster-rcnn 论文讲解

    Faster RCN已经将特征抽取(feature extraction),proposal提取,bounding box regression(rect refine),classification ...

  10. Java中带标签的break,continue

    首先不带标签的break,continue 就不介绍了.大家平时用的最多的也就是这样的情况了. 首先Java中没有goto,但是可以利用带标签的break, continue来实现类似的跳转. 首先来 ...