BufferedReader,readLine运行一半

时间:2013-11-30 19:00:51

标签: java android tcp client-server

你好我尝试用我的java应用程序读取一个未确定的行数(1到150之间,每行是vontaines在一个数据包中,并且数据包包含1个数字和1个文本)(当客户端之间的连接时服务器已建立)但似乎它的工作在一半。我只收到2到3行,有人可以帮助我吗?

class test implements Runnable {
    @Override
    public void run() {

        try {

                while(true){
                    DataInputStream reader = new DataInputStream(socket.getInputStream());
                    BufferedReader inFromClient = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            int tailleMessage = reader.readUnsignedShort();
            if (reader.available() < tailleMessage ){
                return;
            }
               while (( messagep = inFromClient.readLine()) != null){
                   tailleMessage = reader.readUnsignedShort();
               final String azrty = messagep;                    

            if(!azrty.isEmpty()){
            mHandler.post(new Runnable() {
                @Override
                public void run() {
                    Chat.TextChat.append("\n"+azrty);
                }

            });
            }

               }
            }

        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        catch (Exception e) {
            e.printStackTrace();
            Log.d("erreur",e.toString());
        }
    }

}

1 个答案:

答案 0 :(得分:1)

您不能在Socket上同时使用BufferedReader和其他输入流。缓冲区将“窃取”输入流中的数据。您需要相应地重新设计协议。可能你应该使用writeUTF()/ readUTF()来发送字符串,而不是将它们作为行发送。或者是sibyl你应该使用ObjectInput / OutputStreams。