0 0

ServerSocket返回数据给客户端数据的超时问题5

场景:多线程环境下,客户端通过Socket发送请求给ServerSocket,现在ServerSocket需要去取数据并返回给Socket。取数据的过程时间是不定的,现在要求设置一个超时时间,如果ServerSocket取数据的时间超过一个定值就通知客户端超时并关闭socket。
问题:请问如何设置这个超时时间。
注意:Socket和ServerSocket已经建立了连接。
------------------------------
我想通过一个定时器来实现,不知道可不可以;是否还有什么更好的办法?
求解!!!

问题补充:
aronlulu 写道
setSoTimeout(int timeout)可以试一下。
也可以用定时器。
写一个TimerTask,socketserver接收到这个连接的时候就可以把这个连接与timertask绑定。
TimerTask run里面就是判断连接有没有关闭,没关闭就把它关闭。

setSoTimeout(int timeout)不行吧.这个是在accept()时的超时.我现在是已经建立连接了的.

3个答案 按时间排序 按投票排序

0 0

采纳的答案

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
0 0

引用

setSoTimeout(int timeout)不行吧.这个是在accept()时的超时.我现在是已经建立连接了的.

setSoTimeout(int timeout)是读取数据的超时,代表这段时间内没有接收到数据就断开。
这个应该不满足你的要求,你的需求是socketserver取数据超过一段时间还没取到就断开。在这个层面的话只能用业务代码来搞了,因为tcp层不知道socketserver去其他地方取数据的行为。
所以采用定时器结合回调函数来搞比较保险。

2012年3月20日 19:03
0 0

setSoTimeout(int timeout)可以试一下。
也可以用定时器。
写一个TimerTask,socketserver接收到这个连接的时候就可以把这个连接与timertask绑定。
TimerTask run里面就是判断连接有没有关闭,没关闭就把它关闭。

2012年3月20日 18:43

相关推荐

    Socket发送并接收服务器返回的数据

    本文将深入探讨如何在Android平台上利用Socket进行数据的发送与接收,以及服务器返回数据的处理。 首先,理解Socket的基本概念:Socket,又称为“套接字”,是网络编程中的一个接口,它提供了进程间通信(IPC,...

    Socket服务器端断开后重新打开,客户端将自动完成链接

    每当有新的客户端尝试连接时,accept()方法会返回一个新的Socket对象,用于与该客户端的通信。 描述中提到了Thread技术,这是因为在实际应用中,服务器端通常需要同时处理多个客户端的连接请求。因此,服务器端会为...

    java使用Socket类接收和发送数据

    Java中的Socket类是进行网络通信的核心组件,它主要用于实现客户端与服务器之间的TCP连接,从而进行双向数据传输。本文将深入探讨如何使用Socket类接收和发送数据。 首先,我们需要理解Socket类的基本概念。Socket...

    Android ServerSocket

    这些异常通常表示网络连接问题,如断开、超时或无法绑定到指定端口。 8. **局域网通信**: 同一局域网内的手机通信,需要确保它们知道彼此的IP地址和端口号。在Android设备上,可以使用`InetAddress.getLocalHost...

    MFC:Socket编程—TCP服务端和多个客户端通信 示例代码

    在一个服务端可能需要同时处理多个客户端的连接请求,这可以通过在Accept()函数返回新客户端连接时创建新的线程来实现。每个线程负责处理一个客户端的通信,确保并发性。这样,服务端可以维持多个并发的TCP连接。 `...

    使用TCP在局域网进行数据传输

    在实际应用中,可能还需要处理异常,例如连接超时、网络中断等问题。此外,为了提高效率和用户体验,可以使用多线程技术,让服务器端在处理一个连接的同时,还能接受其他客户端的连接请求。 在"使用tcp传输数据"这...

    android tcp通讯客户端源码

    通过`getInputStream()`获取输入流,接收服务器返回的数据。 3. **单项通信**: 该示例中的TCP客户端仅支持数据向服务端发送,而没有实现从服务端接收数据的功能。这可能是因为某些应用只需要单向发送数据,例如...

    安卓socket通信客户端与服务器端

    5. **异常处理**:在处理Socket通信时,必须妥善处理网络异常,如连接中断、超时或数据传输错误等,以确保程序的健壮性。 6. **调试与测试**:在开发过程中,使用模拟器或真实设备测试客户端,确保与服务器的通信...

    android基于WiFi的socket客户端和服务器端

    通过Socket的输出流写入数据,输入流读取服务器返回的数据。 6. **WiFi通信**:在Android设备上,Socket通信通常依赖于WiFi网络,因此需要确保设备的WiFi功能开启,并且能够连接到互联网。在进行Socket编程时,需要...

    Java Socket 通信服务与客户端完整示例

    当有客户端连接时,返回一个新的Socket对象。 - 通过Socket对象的`getInputStream()`和`getOutputStream()`获取输入输出流,进行数据传输。 - 数据传输完毕后,关闭Socket和ServerSocket。 3. **客户端实现** - ...

    java socket服务端和客户端

    客户端使用`Socket`的`getInputStream()`和`getOutputStream()`,服务器端则使用`Socket`实例(由`ServerSocket.accept()`返回)的相同方法。 - 这些流对象是`InputStream`和`OutputStream`的子类,可以读取或写入...

    SOCKET 网络编程 计算机网络 作业 客户端 服务器端 client svever

    在计算机网络领域,Socket编程是一种基础且至关重要的技术,它为客户端和服务器端的应用程序提供了进行数据通信的接口。Socket在网络层面上实现了进程间的通信,是互联网应用的基础,广泛应用于各种服务,如HTTP、...

    流式套接字实现简单的客户端服务端通信过程

    - 基于TCP的简单聊天程序:服务端接收多个客户端连接,每个客户端可以发送消息给服务端,服务端广播消息给所有在线客户端。 - 文件传输应用:客户端请求服务端的文件,服务端读取文件并分块发送,客户端接收并拼接...

    VC++实现的CSocket TCP客户端和服务器通信示例

    这只是一个基础示例,实际应用中可能需要处理更多的异常情况,如网络中断、超时等问题,以及更复杂的业务逻辑。 在提供的压缩包文件中,"TCPClient"和"TCPServer"可能是两个示例工程,分别包含了客户端和服务器端的...

    c# tcp socket 服务器 客户端程序

    在处理网络通信时,由于网络环境的不稳定,可能会出现各种异常,如连接中断、超时等问题,所以要使用try-catch块进行捕获和处理。 最后,C#中的`System.Threading`命名空间提供了多线程支持,对于并发连接较多的...

    socket通讯 .net做为服务器端和java 做为客户端

    在实际项目中,还需要考虑异常处理、心跳机制、连接超时、断线重连等问题,以保证通信的稳定性和可靠性。 在提供的压缩包文件中,"ConsoleApplication1"可能是一个简单的C# Socket服务器示例,而"demo"可能是Java...

    socket服务端和客户端.zip

    在提供的Java代码中,服务端可能实现了以上步骤,创建了一个ServerSocket,监听特定端口,等待客户端连接,并处理接收到的数据。 **Swift Socket客户端** Swift中,我们可以使用`CFStream`框架来实现Socket通信,...

    Socket实现在客户端上输入计算表达

    在这个场景中,我们关注的是如何在客户端输入计算表达式,然后通过Socket发送到服务器进行计算,最后将计算结果返回给客户端。以下是对这个主题的详细阐述: 1. **Socket基本概念**:Socket是操作系统提供的一种...

    socket tool工具

    同样,也可以设置工具作为服务器,接受客户端连接,并模拟返回不同的响应数据,以验证后台代码的正确性。 在安卓端调试时,由于设备环境限制,直接使用命令行或其他复杂工具可能较为困难,Socket Tool工具就显得尤...

    socket 通信 通信 客户端 服务端

    在编写Socket程序时,需要注意处理异常情况,比如网络中断、超时等问题。同时,为了提高效率和防止资源浪费,通常在完成数据交换后会及时关闭Socket。 此外,Socket编程还可以涉及多线程技术。例如,当服务端接收到...

Global site tag (gtag.js) - Google Analytics