xlo*_*ger 0 java sockets tcp inputstream flush
我已经实现了一个Java程序,它通过ServerSocket从GPS设备读取数据.
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()));
Run Code Online (Sandbox Code Playgroud)
但是,我们发现存在很大的延迟(即Sys out"START ..."和"FINISHED ..."时间之间的偏差很大).花在inputStream.read()上的时间.
如果我使用Java客户端连接到上述服务器端口并向其发送数据,则服务器的inputStream可在几毫秒内读取该消息.下面显示了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();
Run Code Online (Sandbox Code Playgroud)
但是,如果我在"out.flush()"和"out.close()"之前添加"Thread.Sleep(10*1000)",服务器端的延迟将变为10秒...因此我怀疑是否GPS设备没有执行"刷新"并导致服务器端inputstream.read()的延迟...
不幸的是,我们无法控制GPS设备TCP呼叫,因此我无法对其进行任何修改以强制它将"刷新"消息发送到我的输入流...请提示是否有任何方法服务器端可以从中读取数据没有这种延迟的输入流即使客户端(即GPS设备)也不执行"刷新"?