【问题标题】:BufferedReader doesn't read from tcp serverBufferedReader 不从 tcp 服务器读取
【发布时间】:2013-10-15 11:37:45
【问题描述】:

所以我的 android 应用程序中有一个非常奇怪的错误。我正在尝试连接到 TCP 服务器,并交换一些消息,其实并不复杂。我已经设法克服了它一开始的所有问题,但现在我遇到了一个错误,我希望有人知道如何解决。

我连接到服务器并成功获取输入和输出流,但是当读取服务器的响应时,程序冻结。我对此进行了研究,我知道这是因为服务器没有消息。但我也知道服务器会响应,因为我为 iOS 制作了相同的应用程序并且它接收到的一切都很好。会不会是安卓的问题?或者只是系统中的一些设置?

这是代码的 sn-p,向您展示这没什么大不了的。我在代码中没有更多内容,但如果您需要查看其余部分,请询问。

提前致谢!

try {
            InetAddress serverAddr = InetAddress.getByName(serverIP);

            tcpSocket = new Socket(serverAddr, serverPort);
            Log.e("socket",
                    "created socket with " + serverIP
                            + Integer.toString(serverPort));

            out = new PrintWriter(new BufferedWriter(
                    new OutputStreamWriter(tcpSocket.getOutputStream())),
                    true);
            Log.e("socket", "output stream created alright");
            in = new BufferedReader(new InputStreamReader(
                    tcpSocket.getInputStream()));
            Log.e("socket", "input stream created alright");
            out.println("handheld#" + clientID + "#connection request");
            fromServer = in.read();
            while(fromServer != -1) {
                fromServer = in.read(); //updated, still no good
            }


            connected = true;
            Log.e("socket", "connect thread will finnish");
        } catch (UnknownHostException e) {
            Log.e("socket", "error finding host", e);
        } catch (IOException e) {
            Log.e("socket", "error creating socket's streams", e);
        }

【问题讨论】:

  • 它冻结在第一个 in.read();
  • 当然可以。应该是.. while (fromServer != -1) fromServer = in.read();
  • 是的,谢谢。但试了一下,现在改正了,还是不动……

标签: java android tcp bufferedreader


【解决方案1】:

希望下面的代码能正常工作

    InputStream in = tcpSocket.getInputStream();
    if(in == null)
     return null;
    Log.e("socket", "input stream created alright");
    out.println("handheld#" + "1111" + "#connection request");


    byte[] buff = new byte[1024];

    int read = -1;
    long totalRead = 0;
    while ((read = in.read(buff)) > 0) 
   {
    out.write(buff, 0, read);
    Log.i("readed Byte ", new String(buff));

    totalRead += read;
    if (totalRead % 100 * 1024 == 0) 
    { 
      System.out.printf("%d bytes read\n", totalRead); 
   }
  }

我已经在我的示例中实现了从输入流中成功读取的内容。

【讨论】:

  • 非常感谢您的耐心等待。我了解您试图防止的问题以及您正在做的优化。但你认为它会帮助我吗?您认为这是我的代码中的内容吗? (不过我还没有尝试过)
  • 我试过了,还是一样的问题。我真的认为这与我设备上的 android 或其他东西有关。还能是什么?代码正确,服务器响应..
猜你喜欢
  • 2020-01-28
  • 2019-01-29
  • 1970-01-01
  • 2020-05-01
  • 2021-09-05
  • 2016-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多