Java读取超时不起作用

标签 java android sockets

我尝试使用 Android 上的套接字连接我的服务器。我希望它像这样工作;当我向服务器发送请求时,如果有响应,请调用我的响应函数。如果发生 500 毫秒的超时(将检查异常和我设置的 boolean 值),我想执行另一个函数。但是使用我使用的这段代码,当我向服务器发送某些内容并等待响应时,如果有响应,它会执行 onServerResponse 函数,而在没有响应时,它不会执行任何操作(挂起)。我如何编辑此代码,以便在没有响应时抛出超时异常?

            boolean control = false;
            try{
                Socket socket = new Socket();
                socket.setSoTimeout(500);
                socket.connect(new InetSocketAddress(InetAddress.getByName(SERVER_IP),SERVER_PORT));
                BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(),"UTF-8"));
                bw.write("asdasd\n");
                bw.flush();
                control = true;
                int readInt = -1;
                String read = null;
                StringBuilder sb = new StringBuilder("");
                while((readInt = socket.getInputStream().read()) != -1){
                    sb.append((char)readInt);
                }
                read = sb.toString();
                if(read != null && read.trim().length() > 0){ onServerResponse(read); }
            }catch(Exception e){ Log.v("Main", "GOT AN ERROR: "+e+control); }

问题已解决,请参阅评论以获取答案。

最佳答案

我不确定这是否能回答您的问题,但是setSoTimeout仅适用于连接后对套接字的读取,不适用于建立连接本身。为此,请使用 socket.connect(SocketAddress address, int timout)过载。) 过载。您可能想同时使用两者。

关于Java读取超时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18035398/

相关文章:

c++ - 使用 C++/boost 套接字的简单客户端/服务器在 Windows 下工作,但在 Linux 下失败

c++ - USS C++套接字编程和_OE_SOCKETS

c# - 网络断开时的WebSocket重新连接问题

java - 使用 SlidingUpPanel 库将 View 保持在底部

java - 从抽象类扩展和打印

java - Hibernate 序列化中的字符串到 GML 对象

java - 如何在并发事务中实现高性能的对象隔离解决方案

android - 如何从 Firebase 接收具有特定字符串 android 的数据

android - android开发中的FM radio 应用

java - 如何在 Maven 项目中打包资源?