Ale*_*olz 0 java tcp flush dataoutputstream
我有一个Java客户端,它将UTF-8字符串发送到C#TCP-Server,我正在使用DataOutputStream来发送字符串.代码如下所示:
public void sendUTF8String(String ar) {
if (socket.isConnected()) {
try {
dataOutputStream.write(ar.getBytes(Charset.forName("UTF-8")));
dataOutputStream.flush();
} catch (IOException e) {
handleException(e);
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,冲洗似乎不正常.如果我发送两个字符串彼此接近,服务器只接收一个包含两个字符串的消息.如果我在调用之间执行Thread.sleep(1000),整个过程都有效,这显然不是解决方案.我错过了什么?
flush()不保证数据包被发送出去.您的TCP/IP堆栈可以自由捆绑数据以实现最高效率.更糟糕的是,您和目的地之间可能存在大量其他TCP/IP堆栈,并且它们可以自由地执行相同操作.
我认为你不应该依赖数据包捆绑.在数据中插入逻辑终结符/分隔符,您将处于安全的一面.