java socket read timeout

大神们有没有遇到过网络通信实机上成功了,但是socket的read就是失败的情况(timeout)啊。
wireshark抓包确认服务器端的数据已经回来了。

用winsocket写个测试程序也是ok的。

设置socket的Timeout时间为10s也不行

4个回答

摘别人的:
3 socket读超时
如果输入缓冲队列RecvQ中没有数据,read操作会一直阻塞而挂起线程,直到有新的数据到来或者有异常产生。调用setSoTimeout(int timeout)可以设置超时时间,如果到了超时时间仍没有数据,read会抛出一个SocketTimeoutException,程序需要捕获这个异常,但是当前的socket连接仍然是有效的。

如果对方进程崩溃、对方机器突然重启、网络断开,本端的read会一直阻塞下去,这时设置超时时间是非常重要的,否则调用read的线程会一直挂起。

TCP模块把接收到的数据放入RecvQ中,直到应用层调用输入流的read方法来读取。如果RecvQ队列被填满了,这时TCP会根据滑动窗口机制通知对方不要继续发送数据,本端停止接收从对端发送来的数据,直到接收者应用程序调用输入流的read方法后腾出了空间。
原贴url:"ttp://blog.csdn.net/sureyonder/article/details/5633647"

所以根据它说的,你的呢个错误不是错误,而是正常!汗!注意你的抓包频率,假如你10秒抓一次包,设置超时时间为15秒,就不会出现呢个异常了

正常时间应该是你抓包频率的1.5倍吧,

这个找到方法修改了,数据发送和数据接收放在两个线程中,就好用了。想来想去也没想出来原因。
毕竟有些命令发送和接收在一个线程中就行。

因为也看不到服务器端的代码。所以暂时先不管了。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C/S通讯,关于java.net.SocketTimeoutException:Read time out:错误
最近的超时异常在整理的文档中找到了,一并分享。 为什么会产生java.net.SocketTimeoutException: Read timed out: 产生此问题的根本原因是客户端在发送请求的过程中,服务器只接受了很少的一部分参数,但是此后客户端没有再发数据导致服务器接受的数据并不完整,所以wls在等待了30秒后 idle timeout,连接管理器将连接杀掉,服务器抛错。 那为什么会
android蓝牙开发read failed, socket might closed or timeout, read ret: -1
read failed, socket might closed or timeout, read ret: -1 这个问题的原因有很多种可能。 一、如果设备1没开启接收服务,设备2连接它理所当然会连接失败,此时当设备1开启服务,设备2再连接也可能会失败, http://stackoverflow.com/questions/18657427/ioexception-read-failed-
java.io.IOException: read failed, socket might closed or timeout, read ret: -1
最近项目中连接蓝牙之后接收蓝牙设备发出的指令功能,在连接设备之后,创建RfcommSocket连接时候报java.io.IOException: read failed, socket might closed or timeout, read ret: -1错误,下面说一下我的解决方法,希望对各位有一点帮助。 private BluetoothSocket mSocket; priva
java socketTimeOut, jdbc timeout 连接超时时间
注意不是 tcp 的 ack超时时间 .java socket 的超时时间. 指的是每次 read 的超时等待时间. 一般用于短连接场景,及早关闭. 有操作系统来进行超时监控?jdbc 的超时时间其实就是 socket 的超时时间[1] 网络编程Socket之SocketOption参数[2] Java Socket Timeout总结[3] jdbc 超时...
Android 蓝牙对等通信初探
本文阐述蓝牙信开发的基础知识,总结了开发过程中产生的各种问题与解决方法。
oracle 连不上 显示socket read time out
查看1521端口也开着,服务也开着,sqlplus也能连上,但PL/SQL Developer和SQL Developer死活连不上,重启系统也不行。 最后,手动重启oracle服务和监听,解决。
java读取redis的timeout异常
异常内容: redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeoutException: Read timed out at redis.clients.jedis.Protocol.process(Protocol.java:79) ~[jedis-2.1.0.jar:na] at red
Solution for<Closing socket as no data read from it on during the configured idle timeout of 5 secs
In Jdeveloper 11.1.1.1.0, when I am running my web application I am frequently left with the following error from the integrated server: This is because I sometimes have multiple browsers/wi
com.jcraft.jsch.JSchException: timeout: socket is not established
连接SFTP报错信息,折腾了一宿 终于搞明白导致原因与解决办法 导致原因:是因为没有访问权限timeOUt 超时。 解决办法:就是访问权限即可。 com.jcraft.jsch.JSchException: timeout: socket is not established
Jedis “Socket读取超时”导致“返回值类型错误”
从异常信息来看,首先是在'zadd'操作时出现"Socket读取超时异常",具体异常信息"JedisConnectionException: java.net.SocketTimeoutException: Read timed out"。 出现异常后,会销毁这个阻塞的Jedis连接池对象(CustomShardedJedisPool.returnBrokenResource(Custo
httpclient connecttimeout sockettimeout区别
解释httpclient作为http工具包,是基于socket的封装,所以httpclient的connectTimeout、socketTimeout到底层都是socket的connectTimeout、socketTimeout首先看一下 java api,对connectTimeout、socketTimeout的解释 socket的connect方法 connect public
Java避免Socket的read等阻塞操作无限等待
转自:http://blog.csdn.net/fw0124/article/details/412275431)发送完后调用Socket的shutdownOutput()方法关闭输出流,这样对端的输入流上的read操作就会返回-1。 注意不能调用socket.getInputStream().close()。这样会导致socket被关闭。 当然如果不需要继续在socket上进行读操作,也可以直
run: read failed, socket might closed or timeout, read ret: -1
蓝牙连接时候 报的异常  run: read failed, socket might closed or timeout, read ret: -1, 把UUID 改成了这个: String SPP_UUID ="00001105-0000-1000-8000-00805f9B34FB"; 目前没有报错
关于 Socket 设置 setSoTimeout 误用的说明
做网络开发的想必对setSoTimeout这个方法很熟悉,知道是设置的超时事件。但是很多人都认为这个是设置链路的超时时间,但是查看相关文档的此方法的说明: HttpConnectionParams: Sets the default socket timeout (SO_TIMEOUT) in milliseconds which is the timeout for waiting fo
Linux下的socket编程实践(五)设置套接字I/O超时的方案
(一)使用alarm 函数设置超时 #include unsigned int alarm(unsigned int seconds); 它的主要功能是设置信号传送闹钟。信号SIGALRM在经过seconds指定的秒数后传送给目前的进程,如果在定时未完成的时间内再次调用了alarm函数,则后一次定时器设置将覆盖前面的设置,当seconds设置为0时,定时器将被取消。它返回上次定时器剩余时
socket超时设置详解(connect/read/write)
一.基本概念(摘自:《unix网络编程卷1》14.2 套接字超时) 在涉及套接字的I/O操作上设置超时的方法有以下三种 (1)调用alarm,它在指定超时期满时产生SIGALARM。这个方法涉及信号处理,而信号处理在不同的实现上存在差异,而且可能干扰进程中现有的alarm调用。 (2)在select中阻塞等待I/O(select有内置的时间限制),以此替代直接阻塞在read或write调用上
tomcat servlet java.net.SocketTimeoutException: Read timed out 解决办法
最近在整一个拍照上传,手机通过无线网络上传照片到服务器,服务器端是JAVA写的servlet;思路是将较大的图片分块发送到服务器进行拼装。但发现服务端在读取图片数据时候( InputStream.read)多半是java.net.SocketTimeoutException: Read timed out,网络连接并未超时或断开,服务器的处理结果都发送给手机端(当然是错误消息);而用WIFI这种错
Socket得到的InputStream,read方法阻塞的问题
http://topic.csdn.net/u/20090304/15/a3df12fd-1896-4a17-bedc-cb863c955ecc.html http://topic.csdn.net/u/20080620/11/478e7d71-e92a-4aca-8156-c9cfcb401bef.html?341823992 http://topic.csdn.net/u/20
关于http socket timeout 超时时间 未设置 导致线程一直在等待(线程饥饿),微信公众号开发过程遇到的。java
问题:http socket timeout 未设置 导致线程饥饿  1、我使用的是微信提供的包 maven坐标:                               me.chanjar                   weixin-java-mp                   1.3.3              里面是有了httpclient
SoapUI socket time out
The default value for socket timeout is 60 seconds. If you need to increase it, check out File->Preferences->HTTP Settings->Socket Timeout   生成TestSuite,右键某一个case,选择Options,有个TestCase timeout,在这
深入java SocketInputStream看read具体如何操作
在网络编程中,常用的操作莫过于读写了,最重要的,也是最经常让程序员犯迷糊的地方。想要具体理解,当然还是看源码,看下面代码: ServerSocket serverSocket = new ServerSocket(4887); Socket client= serverSocket.accept(); InputStream is= client.getInputStream
weblogic 服务不响应java.net.SocketTimeoutException: Read timed out
weblogic服务不能访问,后台的报错,重启服务就恢复正常了。 #### > weblogic.utils.NestedRuntimeException: Cannot parse POST parameters of request: '/web/ontractpayment/invoice/queryNewTaskInfoCountByUserIdAndproces
httpclient SocketTimeout ConnectTimeout ConnectionRequestTimeout
httpclient超时时间说明ConnectionRequestTimeouthttpclient使用连接池来管理连接,这个时间就是从连接池获取连接的超时时间,可以想象下数据库连接池ConnectTimeout连接建立时间,三次握手完成时间SocketTimeout数据传输过程中数据包之间间隔的最大时间下面重点说下SocketTimeout,比如有如下图所示的http请求虽然报文(“abc”)返回
深入理解JDBC的timeout
转载自:http://blog.csdn.net/kobejayandy/article/details/46916063 恰当的JDBC超时设置能够有效地减少服务失效的时间。本文将对数据库的各种超时设置及其设置方法做介绍。 真实案例:        在遭到DDos攻击后,整个服务都垮掉了,当屏蔽了所有的DDos攻击,并恢复了网络后,业务系统却还是无法工作。通过分析系统的th
关于PHP中Socket连接及读写数据超时的问题
<br />虽然PHP中对fsockopen()方法有连接socket的超时参数,但是没有类似C中的连接成功后对数据的读写超时参数设置。没关系,PHP中对stream提供了一系列的方法以防止超时<br /><br /> stream_set_blocking( $fp , false )//设置数据流为阻塞模式,以防止数据没读完就退出<br /><br /> 如果模式为 false, 给定的 socket 描述符将切换到非块模式, 如果为 true, 则切换到块模式. 这个效果类似于 fgets() 从
设置socket的Connect超时
[From]http://dev.cbw.com/c/c/200510195601_4292587.shtml1.首先将标志位设为Non-blocking模式,准备在非阻塞模式下调用connect函数2.调用connect,正常情况下,因为TCP三次握手需要一些时间;而非阻塞调用只要不能立即完成就会返回错误,所
出现连接超时SocketTimeoutException后一直连接不上的
需求频繁的上传数据,本来使用HttpClient上传数据,每次上传一段时间就会出现连接超时的问题,然后后续的请求统统都是连接超时。后来换了okhttp3.5还是一样的问题。不明白了。ios好好的,用的公司wifi,绑不绑电脑ip代理都会出现,而且只是个别手机出现。基本上运行一个小时才会出现,调试好费时间的。下面是我的解决方法,我也不知道为啥。很简陋 我的OKhttpClient是这样的,默认10秒。
A complete message could not be read on socket
Weblogic81中HttpCompleteMessageTimeout相关的两个异常   在网络性能较差的环境中,weblogic server的日志中经常能看到如下的两种异常, 1:#### > <Connection failure. java.
使用java连接Fastdfs,上传文件时报:SocketTimeOutException的问题
http://blog.csdn.net/jsflzhong/article/details/51647481
Java-----Socket中read方法什么时候返回-1
Java-----Socket中read方法什么时候返回-1
spark redis 中碰到java.net.SocketTimeoutException: Read timed out问题的解决
最近在写入redis的时候,程序跑着跑着会发现碰到这样的问题。 redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeoutException: Read timed out at redis.clients.util.RedisInputStream.ensureFill(RedisInp
ConnectTimeout and ReadTimeout
网络编程时,经常遇到很多timeout异常,下面是java URLConnection 中经典的2种 timeout参数,这些参数设置不当的话,就会遇到timeout 异常。 1. ConnectTimeout , java 是这样解释的。 意思是用来建立连接的时间。如果到了指定的时间,还没建立连接,则报异常。 Sets a specified timeout value, in
java.net.SocketTimeoutException: Read timed out 的解决办法 android平台 腾讯微博开发
刚接手腾讯微博,做了个小DEMO。公司网络有代理。发照片时一半左右发送失败,错误信息如下 W/System.err(31723): java.net.SocketTimeoutException: Read timed out W/System.err(31723):     at org.apache.harmony.xnet.provider.jsse.NativeCrypto.SSL_r
Java之Socket上的Read操作阻塞问题
从Socket上读取对端发过来的数据一般有两种方法: 1)按照字节流读取 [java] view plain copy BufferedInputStream in = new BufferedInputStream(socket.getInputStream());   int r = -1;   List l = new LinkedL
蓝牙连接异常,报错The application may be doing too much work on its main thread.
W/BluetoothAdapter: getBluetoothService() called with no BluetoothManagerCallback W/System.err: java.io.IOException: read failed, socket might closed or timeout, read ret: -1 W/System.err:     at an
RecyclerView添加多种布局
上一篇文章讲述了一下ListView添加多种布局,现在RecyclerView已经火的不行不行了,那么我们再讲述一下RecyclerView添加多种布局,同样的效果图还是上篇文章中的对话列表只是ListView改为RecyclerView。 RecyclerView怎么用我就不多讲了网上很多例子,我们在Xml文件替换ListView: xmlns:android="http://sch
memcached socket timeout
今天项目在跑的时候,突然抛出 memcached socket timeout 异常, 检查很久不知道原因
关于Java Tcp Socket InputStream read()得不到-1
服务端 Socket,accept() socket InputStream read() -1 socket.getOutputStream() socket.shutdownOutput()
报表使用hive数据源报java.net.SocketTimeoutException: Read timed out
数据库表的数据量大概50W左右,在报表设计器下创建了hive的数据源,连接正常,由于数据量比较到,就用了润乾报表的大数据
Java中Socket上的Read操作阻塞问题
从Socket上读取对端发过来的数据调用read()和readLine()。 这两个方法都会读取对端发送过来的数据,如果无数据可读,就会阻塞直到有数据可读。或者到达流的末尾,这个时候分别返回-1和null。 这个特性使得编程非常方便也很高效。 但是这样也有一个问题,就是如何让程序从这两个方法的阻塞调用中返回。
【Java TCP/IP Socket】TCP Socket通信中由read返回值造成的的死锁问题(含代码)
问题的引出     在第一章《基本套接字》中,作者给出了一个TCP Socket通信的例子——反馈服务器,即服务器端直接把从客户端接收到的数据原原本本地反馈回去,示例程序当然运行无误。      书上客户端代码如下: import java.net.Socket; import java.net.SocketException; import java.io.IOException; i
网络传输层TCP协议InputStream read方法是否返回-1
由于通信路径只是单机并没有经过网络,因此两个进程之间的互通相对与网络传输是比较快速的。因此,进程间的交互使用了如下方式: (见上传图片) 让我们看一下代码实现: Java代码 public synchronized void send(byte[] bytes) throws IOException    {        if (bytes !
一种解决Android进行蓝牙连接时发生socket已关闭或超时错误的方法
在进行树莓派与android蓝牙通信时遇到一个难以解决的错误: java.io.IOException: read failed, socket might closed or timeout, read ret: -1 这个错误是出现在: try { mmSocket.connect();// This is a blocking ...
socket setSoTimeout方法
做网络编程的人对setSoTimeout方法一定很熟悉,都知道是设置连接的超时时间! 但是我在网上找资料时发现很多人把这个超时时间理解成了链路的超时时间!我看了一下JDK 关于这个方法的说明,其实根本不是链路的超时时间!   Java代码   setSoTimeout  public void setSoTimeout(int timeout)      thr
python中关于socket的timeout设置的问题
今天发使用urllib2请求http时, 发现超时时间与设置的不一致。 例如下面的代码httpreq.request('http://www.baidu.com', timeout=1),将80端口使用iptables封掉后,发现要2秒才能超时,与设置的1不相符。抓包分析有两次连接,但不解为什么会连接两次,难道是重试机制? 跟踪了一下代码,发现最终会调用socket.create_connec
java socket 长连接 nputStream的read 阻塞问题情况之一
1、建立socket长连接以后,进行数据读取,代码如下         Socket socket = socketmap.get(handler);         try {                 BufferedInputStream br = new BufferedInputStream(socket.getInputStream());               
linux socket read函数
int my_read(int fd, void *buffer, int length) { int bytes_left; int bytes_read; char *ptr = NULL; bytes_left = length; while
<BEA-000449><Closing socket as no data read from it on timeout of 5 secs>问题
weblogic后台会报这样的警告: 而且是每过5秒就报一次,如果长时间前台不动,后台会有一堆warning。这个是weblogic服务器连接超时的warning 默认设置的是5000ms,可以这样更改 登录weblogic 主页-环境-服务器-AdminServer-优化 在优化选项下有登录超时选项,更改即可 关于连接超时的说明: The lo
linux上TCP connection timeout的原因查找
最近在产线上经常出现connection timeout的问题
Springboot数据库连接池报错SocketTimeoutException:
Springboot数据库连接池报错SocketTimeoutException: java.net.SocketException: Broken pipe  移除点击此处添加图片说明文字 ​发现服务一般过一段时间会报错。​  移除点击此处添加图片说明文字 ​注意这个报错:  移除点击此处添加图片说明文字 可以看到​Read timed out  这个异常通常在L
立即提问