2013-10-15 60 views
0

所以我在我的android应用程序中有这个非常奇怪的错误。我试图连接到TCP服务器,并交易一些消息,没有什么复杂的,真的。我已经设法超越了一开始就遇到的所有问题,但现在我陷入了一个我希望有人知道如何解决的错误。BufferedReader不从tcp服务器读取

我连接到服务器并成功获取输入和输出流,但是当从服务器读取响应时,程序冻结。我研究过这一点,我知道这是因为服务器没有消息。但我也知道服务器响应,因为我已经为iOS创建了相同的应用程序,并且它收到了一切正常。它可以是一些机器人问题?或者只是在系统中的一些设置?

下面是代码片段,告诉你这不是什么大问题。我没有更多的东西在代码中,但如果你需要看看它的其余部分,请问。

在此先感谢!

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); 
     } 
+0

它在第一个in.read()中冻结; – pavlag

+0

当然是的。它应该是.. while(fromServer!= -1)fromServer = in.read(); – JenEriC

+0

是的,这是真的,谢谢。但尝试过,现在这是纠正,它仍然不动... – pavlag

回答

0

希望下面的代码做工精细

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); 
    } 
    } 

我有我的样品从InputStream中成功读取中实现。

+0

谢谢你的耐心,真的。我了解您尝试阻止的问题以及您正在进行的优化。但你认为这会对我有帮助吗?你认为这是我的代码中的东西吗? (虽然我还没有尝试过) – pavlag

+0

我试过了,仍然是同样的问题。我真的认为这与我的设备上的android有什么关系。它还能是什么?代码的权利,服务器响应.. – pavlag