При использовании сокета TCP вы обрабатываете «потоки».То есть по умолчанию разделение между сообщениями отсутствует.Поступая так, как вы делаете, вы можете прочитать часть сообщения или, что еще хуже, прочитать больше, чем сообщение.
Самый распространенный способ - разделить ваши сообщения.Вы можете использовать DataInputStream / DataOutputStream, который кодирует строки в байты и использует первые байты, чтобы указать их длину.Таким образом, он знает, сколько байтов он должен прочитать на стороне получателя.
DataOutputStream out = null;
DataInputStream in = null;
Socket socket = new Socket("192.168.0.15",4444);
out = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream()));
in = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
out.writeUTF(xmlInString);
out.flush(); // to ensure everything is sent and nothing is kept in the buffer.
// wait for response
String responseLine = in.readUTF();
Затем настройте соответствующий код сервера.
При использовании Buffered
выходов с сокетами, чторекомендуется по соображениям производительности, рекомендуется flush()
после того, как вы написали сообщение, чтобы убедиться, что все фактически отправлено по сети и ничего не хранится в буфере.
Ваша первоначальная проблема, вероятно, произошла, потому что ваше сообщение требуетнесколько пакетов TCP / IP, и на вашем сервере вы читаете только первый (ие), который только что прибыл.