【问题标题】:How to set timeout in this socket connection and send data to client?如何在此套接字连接中设置超时并将数据发送到客户端?
【发布时间】:2019-08-22 06:26:35
【问题描述】:

我已经获取了手动输入的 Socket Ip 和端口,现在我想为套接字连接设置超时。以及如何在下面的代码中向客户端发送数据。

 public void run() {
            try {
                socket = new Socket(eHostIp.getText().toString(), Integer.parseInt( eHostPort.getText().toString() ) );
                socket.connect( );
                //PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
                //out.println("");
                eReceiveData.setText( "Server Connected" );
                //eReceiveData.setText( socket.getInputStream().read() );

                BufferedReader in = new BufferedReader( new InputStreamReader( socket.getInputStream() ), 1024 );
                eReceiveData.setText( "Server Connected... XXXXXXX" );
                String line;
                while ((line = in.readLine()) != null) {
                    Log.d("read line",line);
                    eReceiveData.setText( line );
                    socket.close();
                }

                socket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    } );
    thread.start();

【问题讨论】:

  • 这个一个客户。这里甚至没有任何东西连接到客户端,更不用说在任何地方发送任何东西了。关闭该读取循环内的连接完全是零意义。
  • 我只是在尝试它,因为服务器响应仅在套接字关闭时收到。但是一旦发送,我希望它在现场。请帮助我在发送后从服务器接收数据。 @user207421
  • 在没有看到服务器代码的情况下很难调试,nicht war?

标签: java android sockets server client-server


【解决方案1】:

使用Socket.connect(SocketAddress endpoint, int timeout)方法指定超时。

为了写入套接字,从它获取输出流(通过 socket.getOutputStream())并写入该输出流。

注意:不要在 while 循环中关闭套接字!关闭套接字后无法写入。

【讨论】:

    猜你喜欢
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-02
    • 2013-11-30
    • 1970-01-01
    • 2016-05-10
    • 1970-01-01
    相关资源
    最近更新 更多