javasocket客户端设置未接收到数据的超时问题

author author     2023-04-12     239

关键词:

服务端是别人写的这里改不了;这里是一个网页,通过点按钮触发从客户端发送一个消息到服务端,然后客户端从服务端接收返回的消息反馈到网页上。
当然前面是背景不是重点……
现在想问一个问题就是:如何在客户端设置一个超时时间,发送消息过去之后一段时间没有接收到服务端返回的信息就断开这个连接???
现在已经确定服务端是卡在某个地方只有格式正确才能继续下去,但是人家服务端是封装的,不让改……
已经被这个卡了一个多月了,若有指点,不甚感激!解决必加分!
确定是socket,至于更新web则是通过ajax传数据,首先web传到后台,然后调用socket发送信息到服务端,服务端做出响应返回客户端,再return回前台页面,本质还是socket上的问题,这不是关键,只是介绍一下背景,说明无权更改服务端;然后,我已经在网上搜了好久,这个timeout设置应该是有的,但是现在代码卡在:BufferedReader is = new BufferedReader(new InputStreamReader(sendsocket.getInputStream()));这句上了,前面一句是:senddos.write(tempByte);senddos.flush();用来向服务端发送数据,现在是服务端卡死了,目标是在客户端这边做出设置,使得客户端可以在超出设置超时时间后未得到响应则自行断开连接;现在想求的就是这一段的具体代码,什么方法都可以,只要能在客户端达到上面提出的目的……不胜感激再具体请移步http://zhidao.baidu.com/question/175904057955128964.html

建议如果是长时间没有收到数据的话,或者是不想长时间等待的话,都可以通过设置超时时间来进行断开连接,之后继续处理逻辑(设置socket的setSoTimeout方法实现即可,时间单位是毫秒):

package socket;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketAddress;
import java.net.SocketException;
import java.net.SocketTimeoutException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
public class SocketService 
public static void main(String[] args) 
try 
SocketAddress address = new InetSocketAddress("192.168.9.155", 3000);
// 启动监听端口 8001
ServerSocket ss = new ServerSocket();
ss.bind(address);
// 接收请求
Socket s = ss.accept();
new Thread(new T(s)).start();
 catch (Exception e) 
e.printStackTrace();



class T implements Runnable 
public void run() 
try 
System.out.println(socket.toString());
socket.setKeepAlive(true);
socket.setSoTimeout(5 * 1000);
String _pattern = "yyyy-MM-dd HH:mm:ss";
SimpleDateFormat format = new SimpleDateFormat(_pattern);
while (true) 
System.out.println("开始:" + format.format(new Date()));
try 
InputStream ips = socket.getInputStream();
ByteArrayOutputStream bops = new ByteArrayOutputStream();
int data = -1;
while((data = ips.read()) != -1)
System.out.println(data);
bops.write(data);

System.out.println(Arrays.toString(bops.toByteArray()));
catch(SocketTimeoutException e)
e.printStackTrace();
catch(SocketException e)
e.printStackTrace();
 catch (Exception e) 
e.printStackTrace();

Thread.sleep(1000);
System.out.println(socket.isBound()); // 是否邦定
System.out.println(socket.isClosed()); // 是否关闭
System.out.println(socket.isConnected()); // 是否连接
System.out.println(socket.isInputShutdown()); // 是否关闭输入流
System.out.println(socket.isOutputShutdown()); // 是否关闭输出流
System.out.println("结束:" + format.format(new Date()));

 catch (Exception e) 
e.printStackTrace();


private Socket socket = null;
public T(Socket socket) 
this.socket = socket;

public Socket getSocket() 
return socket;

public void setSocket(Socket socket) 
this.socket = socket;

参考技术A 首先,确定你这是socket连接吗? 通过socket的连接然后去更新 web页面?

然后,不管是socket 还是 http连接, 都是有timeout时间设置的。追问

非常感谢您的回答,但是具体代码上面的问题我自己无法解决,问题补充大致说明了一下情况,如果再具体请移步http://zhidao.baidu.com/question/359893174320771692.html,谢谢

本回答被提问者采纳

javasocket通信之客户端程序发送和接收数据(代码片段)

 JavaSocket通信(一)之客户端程序发送和接收数据网络应用分为客户端和服务端两部分,而Socket类是负责处理客户端通信的Java类。通过这个类可以连接到指定IP或域名的服务器上,并且可以和服务器互相发送和接受数据。对... 查看详情

如何使用聊天客户端未接收到的 slimXMPP 发送一些数据?

】如何使用聊天客户端未接收到的slimXMPP发送一些数据?【英文标题】:HowcanIsendsomedatawithsleekXMPPthatisNOTpickedupbyachatclient?【发布时间】:2015-09-0313:40:34【问题描述】:我想将XMPP用作我的应用的“哑数据传输”,因为它有用户、联... 查看详情

python3套接字udp设置接受数据超时

如图是个udp客户端,发送信息,并验证服务器端是否在线,我的做法是客户端向服务器端发送一个包,服务器端收到包并回复确认信息,如果客户端超时3s未接收到确认信息,则将服务器端口保存下来,如果用settimeout()方法可以... 查看详情

javasocket的accept()方法不能连续获取数据原因

服务端代码如下:客户端代码如下:   其中bufOut.newLine();很关键。因为accept()方法会将回车符作为结束标志,如果没有这一行,会继续接收,不会认为客户端此次传输已结束。  查看详情

可以为javasocket写消息设置超时吗

参考技术A可以。URLConnection里面有一个setConnectionTimeout(inttimeout);*@paramtimeoutan@codeintthatspecifiestheconnect*timeoutvalueinmilliseconds 参考技术BSocketsocket=newSocket();SocketAddressaddress=newInetSocketAddress("127.0.0.1",8080);trysocket.connect(address,90000);S... 查看详情

在同一台计算机上进行数据传输出现tcp错误56

...序:确保生成错误的VI正确设置了超时值。比如:使用HTTP客户端下的“GET.vi”从慢速服务器接收体量较大的字符串时,默认的10秒超时时间可能不够。如果使用TCP/IP函数编写了可重入VI ,请尝试关闭可重入功能。因为可能会... 查看详情

我想问一下神通广大的各位网友,为啥我前端使用websocket通信的时候后台可以接收到我客户端发送的消息?

但是服务器端向客户端发送的时候客户端接收不到数据,返回的接口里只有size属性,没有具体传输的数据(默认传递blob数据)楼主可以检查下你websocket客户端的接收方式是否有问题哦。你能发送成功,说明发送代码没问题,要... 查看详情

stm32硬件uart接收超时检测设置(代码片段)

STM32硬件UART接收超时检测设置-----------------本文作者“智御电子”,期待与电子爱好者交流学习。----------------应用场景在uart应用中有时候需要进行双工通信,主机需要对从机的数据进行接收超时检测,例如modbus协议,主机在接... 查看详情

如何干净的实现android/javasocket长连接通信

所谓长连接,它通常包含以下几个关键过程:轮询的建立    建立轮询的过程很简单,浏览器发起请求后进入循环等待状态,此时由于服务器还未做出应答,所以HTTP也一直处于连接状态中。    2.数据的推送    在循环过程... 查看详情

javasocket底层是怎样基于tcp/ip实现的

  首先必须明确:TCP/IP模型中有四层结构:应用层(ApplicationLayer)、传输层(TransportLayer)、网络层(InternetLayer)、链路层(LinkLayer)其中Ip协议(InternetProtocol)是位于网络层的,TCP协议时位于传输层的。通过Ip协议可以使可... 查看详情

如何设置 AWS Appsync 请求超时限制 || AWSAppSync 客户端未提供回调

】如何设置AWSAppsync请求超时限制||AWSAppSync客户端未提供回调【英文标题】:HowtosetAWSAppsyncrequesttimeoutlimit||AWSAppSyncClientnotgivingcallback【发布时间】:2019-04-0414:52:54【问题描述】:我正在为我正在开发的当前应用程序使用AWSAppsync,... 查看详情

androidsocket通信能发数据但不能接收到数据?

...,(android端为真机,非模拟器)奇怪的是,完全相同的javasocket通信代码,放在android下收不到数据,但建一个pc的java工程,还是这段代码,却可以收到数据?!trySocketstSocket=newSocket("192.168.0.101",30000);stSocket.getOutputStream().wr... 查看详情

如何设置socket的connect超时

针对套接字操作设置默认超时的概述StreamSocket类实现Windows运行时应用中的TCP套接字。TCP套接字必须建立连接才能发送或接收任何网络数据。Windows8.1、WindowsPhone8.1和WindowsServer2012中实现的基础TCP套接字会针对所有的TCP连接套接字... 查看详情

nginx的超时timeout配置详解

...此提升Nginx的性能。keepalive_timeoutHTTP是一种无状态协议,客户端向服务器发送一个TCP请求,服务端响应完毕后断开连接。如果客户端向服务器发送多个请求,每个请求都要建立各自独立的连接以传输数据。HTTP有一个KeepAlive模式,... 查看详情

Atmel SAME70 USART 接收超时未触发

...200波特率正确发送和接收。我正在使用ASF库,并将RxTimeout设置如下:#defineTBUS_RX_TIMEOUT_MS200u 查看详情

javasocket问题

背景:我想做一个跨路由的聊天程序,服务器端在路由器A下,局域网ip地址为192.168.0.103路由器ip为假设为202.207.208.209;客户端在路由器B下,局域网ip也是192.168.0.103,路由器ip假设为202.207.208.210这是我写的服务器端的ServerSocket:我... 查看详情

ajax对象。同步与异步及ajax发送请求

...用send方法进行请求3:正在接收数据(接收到一部分),客户端已经接收到了一部分返回的数据4:接收完成,客户端已经接收到了所有数据*status:http响应状 查看详情

javasocket实现服务端,客户端简单网络通信。chat

之前写的实现简单网络通信的代码,有一些严重bug。后面详细写。根据上次的代码,主要增加了用户注册,登录页面,以及实现了实时显示当前在登录状态的人数。并解决一些上次未发现的bug。(主要功能代码参见之前随笔https://... 查看详情