データベースへの接続にソケット接続を使用しています。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 を閉じ、そこで Socket を閉じます。EOFに達した時間の一貫性が見つかりません。現在、データの長さは静的です。これを理解しようとしている間は調整していません。しかし、データの長さは動的になります。