InputStream接收不完整的数据

时间:2013-07-25 01:39:32

标签: android sockets inputstream

我正在使用Socket连接来连接数据库。当我通过InputStream从数据库中提取数据时,有时它会返回完整数据,但大多数时候它会返回不完整的数据(5%/ 95%)。数据库发送了一个EOF,但它只有大约5%的时间到达。

    @Override
    protected Socket doInBackground(Void... params) {


        Socket client = null;
        try {
            client = new Socket(SocketHelper.IP_ADDRESS, SocketHelper.PORT);

            //output message
            OutputStream output = client.getOutputStream();
            output.write(message.getBytes("UTF-8"));


            //parse response 
    //blocks here more of the time
            SocketHelper.parseData(client.getInputStream());


        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


        return client;
    }

在我的parse方法中,我查找EOF并且通常会关闭InputStream并关闭Socket。在它达到EOF的时候我找不到任何一致性。现在数据的长度是静态的,我没有调整它,而我试图解决这个问题。但数据的长度将是动态的。

1 个答案:

答案 0 :(得分:-1)

要从Socket读取数据,在您需要循环的parseData方法中,调用read(byte[] b, int off, int len),直到您预期的所有字节都到达。

read方法返回实际读取的字节数;保持循环直到你拥有一切。请记住调整偏移量参数,以便构建完整的消息。