Я реализовал программу Java, которая считывает данные с устройств GPS через ServerSocket.Чтение данных из входного потока без клиентской стороны «flush()»
ServerSocket serverSocket = new ServerSocket(13811);
serverSocket.setReceiveBufferSize(receiveBufferSize);
Socket incomingSocket = serverSocket.accept();
InputStream stream = incomingSocket.getInputStream();
byte[] buffer = new byte[1000];
StringBuffer sb = new StringBuffer();
System.out.println("START getting message from TCP stream: " + dateFormat.format(Calendar.getInstance().getTime()));
while (stream.read(buffer) > 0)
{
sb.append(new String(buffer));
System.out.println(sb.toString());
}
System.out.println("[incomingMessage]: " + incomingMessage);
System.out.println("FINISHED getting message from TCP stream: " + dateFormat.format(Calendar.getInstance().getTime()));
Тем не менее, мы обнаружили, что существует большая задержка (т.е. большое отклонение между Sys из «START ...» и «FINISHED ...» время выше). Время было потрачено на inputStream.read().
Если я использую Java-клиент для подключения к вышеуказанному серверному порту и отправки данных на него, сообщение читается через входной поток сервера в течение нескольких мс. Ниже показан код клиента Java.
Socket socket = new Socket("localhost", 13811);
DataOutputStream out = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream()));
String tobesend = "testing message 1";
out.writeBytes(tobesend);
out.flush();
out.close();
Однако, если добавить "Thread.Sleep (10 * 1000)" перед "out.flush()" и "out.close()", задержка на стороне сервера будет 10seconds .. Поэтому я подозреваю, что GPS-устройство не выполнило «флеш» и привело к задержке вводаstream.read() со стороны сервера ...
К сожалению, у нас нет контроля над TCP-устройствами GPS-устройств, поэтому я могу «внесите в него какие-либо изменения, чтобы принудительно применить его к сообщению« flush »для моего входного потока ... Пожалуйста, советьте, есть ли какие-либо средства, чтобы серверная сторона могла читать данные из входного потока без такой задержки, даже на стороне клиента (то есть на устройстве GPS) не выполнять «флеш»?
Там же вопрос, как, что здесь: [http://stackoverflow.com/questions/1169739/java-tcp-socket-data-transfer-is-slow][1] [1]: http://stackoverflow.com/questions/1169739/java-tcp-socket-data-transfer-is-slow – eduyayo
Спасибо за исх. Похоже, что ссылка говорила о проблеме со стороны отправителя ... Я пытаюсь следовать одному из ответов там, обертывая входной поток сервера BufferedInputStream, но все тот же ...Прошу просветить, если я ошибаюсь. – xlogger