-
ServerSocket返回数据给客户端数据的超时问题5
场景:多线程环境下,客户端通过Socket发送请求给ServerSocket,现在ServerSocket需要去取数据并返回给Socket。取数据的过程时间是不定的,现在要求设置一个超时时间,如果ServerSocket取数据的时间超过一个定值就通知客户端超时并关闭socket。
问题:请问如何设置这个超时时间。
注意:Socket和ServerSocket已经建立了连接。
------------------------------
我想通过一个定时器来实现,不知道可不可以;是否还有什么更好的办法?
求解!!!
问题补充:aronlulu 写道setSoTimeout(int timeout)可以试一下。
也可以用定时器。
写一个TimerTask,socketserver接收到这个连接的时候就可以把这个连接与timertask绑定。
TimerTask run里面就是判断连接有没有关闭,没关闭就把它关闭。
setSoTimeout(int timeout)不行吧.这个是在accept()时的超时.我现在是已经建立连接了的.2012年3月20日 18:25
3个答案 按时间排序 按投票排序
-
采纳的答案
public class MyServerSocket extends Thread { public MyServerSocket(ServerSocket serverSocket,long timeout){ this.serverSocket=serverSocket; this.timeout=timeout; } private ServerSocket serverSocket; private Socket socket; private Thread thread ; private long timeout=1000000; public Socket accept() throws Exception{ this.start(); thread = new Thread() { public void run() { acc(); } }; thread.start(); while(thread.isAlive()){ if(!this.isAlive()){ //这里想让它停止取数好像有点不容易,直接stop进程有点不靠谱 thread.stop(); throw new Exception("accpet time out"); } } return socket; } private void acc() { try { socket=serverSocket.accept(); } catch (IOException e) { e.printStackTrace(); } } @Override public void run() { while(timeout>0){ try { sleep(1000); timeout-=1000; } catch (InterruptedException e) { e.printStackTrace(); } } } }
2012年3月21日 08:27
-
引用
setSoTimeout(int timeout)不行吧.这个是在accept()时的超时.我现在是已经建立连接了的.
setSoTimeout(int timeout)是读取数据的超时,代表这段时间内没有接收到数据就断开。
这个应该不满足你的要求,你的需求是socketserver取数据超过一段时间还没取到就断开。在这个层面的话只能用业务代码来搞了,因为tcp层不知道socketserver去其他地方取数据的行为。
所以采用定时器结合回调函数来搞比较保险。2012年3月20日 19:03
-
setSoTimeout(int timeout)可以试一下。
也可以用定时器。
写一个TimerTask,socketserver接收到这个连接的时候就可以把这个连接与timertask绑定。
TimerTask run里面就是判断连接有没有关闭,没关闭就把它关闭。2012年3月20日 18:43
相关推荐
本文将深入探讨如何在Android平台上利用Socket进行数据的发送与接收,以及服务器返回数据的处理。 首先,理解Socket的基本概念:Socket,又称为“套接字”,是网络编程中的一个接口,它提供了进程间通信(IPC,...
每当有新的客户端尝试连接时,accept()方法会返回一个新的Socket对象,用于与该客户端的通信。 描述中提到了Thread技术,这是因为在实际应用中,服务器端通常需要同时处理多个客户端的连接请求。因此,服务器端会为...
Java中的Socket类是进行网络通信的核心组件,它主要用于实现客户端与服务器之间的TCP连接,从而进行双向数据传输。本文将深入探讨如何使用Socket类接收和发送数据。 首先,我们需要理解Socket类的基本概念。Socket...
这些异常通常表示网络连接问题,如断开、超时或无法绑定到指定端口。 8. **局域网通信**: 同一局域网内的手机通信,需要确保它们知道彼此的IP地址和端口号。在Android设备上,可以使用`InetAddress.getLocalHost...
在一个服务端可能需要同时处理多个客户端的连接请求,这可以通过在Accept()函数返回新客户端连接时创建新的线程来实现。每个线程负责处理一个客户端的通信,确保并发性。这样,服务端可以维持多个并发的TCP连接。 `...
在实际应用中,可能还需要处理异常,例如连接超时、网络中断等问题。此外,为了提高效率和用户体验,可以使用多线程技术,让服务器端在处理一个连接的同时,还能接受其他客户端的连接请求。 在"使用tcp传输数据"这...
通过`getInputStream()`获取输入流,接收服务器返回的数据。 3. **单项通信**: 该示例中的TCP客户端仅支持数据向服务端发送,而没有实现从服务端接收数据的功能。这可能是因为某些应用只需要单向发送数据,例如...
5. **异常处理**:在处理Socket通信时,必须妥善处理网络异常,如连接中断、超时或数据传输错误等,以确保程序的健壮性。 6. **调试与测试**:在开发过程中,使用模拟器或真实设备测试客户端,确保与服务器的通信...
通过Socket的输出流写入数据,输入流读取服务器返回的数据。 6. **WiFi通信**:在Android设备上,Socket通信通常依赖于WiFi网络,因此需要确保设备的WiFi功能开启,并且能够连接到互联网。在进行Socket编程时,需要...
当有客户端连接时,返回一个新的Socket对象。 - 通过Socket对象的`getInputStream()`和`getOutputStream()`获取输入输出流,进行数据传输。 - 数据传输完毕后,关闭Socket和ServerSocket。 3. **客户端实现** - ...
客户端使用`Socket`的`getInputStream()`和`getOutputStream()`,服务器端则使用`Socket`实例(由`ServerSocket.accept()`返回)的相同方法。 - 这些流对象是`InputStream`和`OutputStream`的子类,可以读取或写入...
在计算机网络领域,Socket编程是一种基础且至关重要的技术,它为客户端和服务器端的应用程序提供了进行数据通信的接口。Socket在网络层面上实现了进程间的通信,是互联网应用的基础,广泛应用于各种服务,如HTTP、...
- 基于TCP的简单聊天程序:服务端接收多个客户端连接,每个客户端可以发送消息给服务端,服务端广播消息给所有在线客户端。 - 文件传输应用:客户端请求服务端的文件,服务端读取文件并分块发送,客户端接收并拼接...
这只是一个基础示例,实际应用中可能需要处理更多的异常情况,如网络中断、超时等问题,以及更复杂的业务逻辑。 在提供的压缩包文件中,"TCPClient"和"TCPServer"可能是两个示例工程,分别包含了客户端和服务器端的...
在处理网络通信时,由于网络环境的不稳定,可能会出现各种异常,如连接中断、超时等问题,所以要使用try-catch块进行捕获和处理。 最后,C#中的`System.Threading`命名空间提供了多线程支持,对于并发连接较多的...
在实际项目中,还需要考虑异常处理、心跳机制、连接超时、断线重连等问题,以保证通信的稳定性和可靠性。 在提供的压缩包文件中,"ConsoleApplication1"可能是一个简单的C# Socket服务器示例,而"demo"可能是Java...
在提供的Java代码中,服务端可能实现了以上步骤,创建了一个ServerSocket,监听特定端口,等待客户端连接,并处理接收到的数据。 **Swift Socket客户端** Swift中,我们可以使用`CFStream`框架来实现Socket通信,...
在这个场景中,我们关注的是如何在客户端输入计算表达式,然后通过Socket发送到服务器进行计算,最后将计算结果返回给客户端。以下是对这个主题的详细阐述: 1. **Socket基本概念**:Socket是操作系统提供的一种...
同样,也可以设置工具作为服务器,接受客户端连接,并模拟返回不同的响应数据,以验证后台代码的正确性。 在安卓端调试时,由于设备环境限制,直接使用命令行或其他复杂工具可能较为困难,Socket Tool工具就显得尤...
在编写Socket程序时,需要注意处理异常情况,比如网络中断、超时等问题。同时,为了提高效率和防止资源浪费,通常在完成数据交换后会及时关闭Socket。 此外,Socket编程还可以涉及多线程技术。例如,当服务端接收到...