【问题标题】:Java readline() keeping socket openJava readline() 保持套接字打开
【发布时间】:2013-04-19 22:33:06
【问题描述】:

我试图让我的客户端连接到我的服务器,并根据命令将一些字符串发送回客户端。目前该应用程序连接并可以很好地向服务器发送字符串。但是,当我发送指示服务器发回某些内容的命令时,它会挂起。我发现当客户端尝试读取从服务器发送的行时会出现问题。

服务器

 PrintWriter out = new PrintWriter(new OutputStreamWriter(clientSocket.getOutputStream()));
          out.println("GETDATA" + "\n");                
          out.flush();
          out.close();

客户

BufferedReader fromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));                

        incomingLine = fromServer.readLine();
        Log.d("HERE", "NOT " + incomingLine);
        fromServer.close();

谢谢!

【问题讨论】:

    标签: java android sockets client-server


    【解决方案1】:

    readLine() 方法需要一个行尾字符“\n”,这可能是你的问题

    【讨论】:

    • 请避免回答中的小cmets
    【解决方案2】:

    当我第一次做套接字时,我有效地制作了this same mistake

    不要将PrintWriterBufferedReader 一起使用。它们不兼容。 通过 cmets,PrintWriter 实际上隐藏了关键异常,因此它们不应该用于网络。而是使用DataInputStreamDataOutputStream 进行通信。

    client = new Socket(hostname, port);
    inStr = new DataInputStream(client.getInputStream());
    outStr = new DataOutputStream(client.getOutputStream());
    

    然后,使用writeUTFreadUTF 发送和接收,如下所示:

    public void send(String data) throws IOException {
        outStr.writeUTF(data); outStr.flush();
    }
    
    public String recv() throws IOException {return inStr.readUTF();}
    

    原因与 UTF 编码有关; BufferedReader 需要特定的字符串编码,PrintWriter 没有给出。因此,读/写挂起。

    【讨论】:

    • 我做了更改 服务器在请求后写入客户端out = new DataOutputStream(clientSocket.getOutputStream()); out.writeUTF("This"); out.flush(); 客户端读取发回的内容DataInputStream inStr = new DataInputStream(clientSocket.getInputStream()); incomingLine = inStr.readUTF(); 但是它在读取时挂起,在这种情况下是在 readUTF();
    • @user1116969 嗯?你只需要说out = client.getOutputStream()。但是,是的,这应该可行。
    • 它们并非“不兼容”。默认情况下,它们都使用平台字符集,如果 那些 不兼容,您就有问题了。但是,例如,您始终可以使用相同的字符集构建两者。然而,PrintStream 和 PrintWriter 都吞下了您在网络编程中需要了解的异常,因此它们不应该在网络上使用。
    • 就像我上面说的,所做的更改仍然挂起。有什么想法吗?
    • @user1116969 任何发送都会等到有东西接收数据;任何接收都会等到有东西发送数据。验证两者是否同时发生。
    猜你喜欢
    • 2012-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-28
    • 2011-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多