Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android InputStream接收不完整的数据_Android_Sockets_Inputstream - Fatal编程技术网

Android InputStream接收不完整的数据

Android InputStream接收不完整的数据,android,sockets,inputstream,Android,Sockets,Inputstream,我正在使用套接字连接连接到数据库。当我通过InputStream从数据库中提取数据时,有时它返回完整的数据,但大多数时候它返回不完整的数据(5%/95%)。数据库会发送一个EOF,但它只在大约5%的时间内发送 @Override protected Socket doInBackground(Void... params) { Socket client = null; try { client = new 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;
    }

在我的解析方法中,我查找EOF,通常会关闭InputStream并关闭那里的套接字。我找不到它达到EOF的时间的一致性。现在数据的长度是静态的,我在试图解决这个问题时没有调整它。但是数据的长度将是动态的。

要从
套接字读取数据,在
parseData
方法中,需要循环调用,直到预期的所有字节都到达为止


read
方法返回实际读取的字节数;继续循环,直到获得所有内容。记住调整offset参数,以便构建完整消息。

SocketHelper.parseData
做什么?确实如此。如果不知道,您的问题将无法回答。SockerHelper.parseData创建缓冲区从客户端返回InputStream的edReader.getInputStream();而((line=reader.readLine())!=null)。。。。