java等待socket数据传输
我使用DataOutputStream
通过网络传输数据,如下所示:
Socket socket = new Socket(ipAddress, port);
DataOutputStream dataOutputStream = new DataOutputStream(
socket.getOutputStream());
dataOutputStream.writeBytes("Stackoverflow");
// ...
System.exit(0);
如果我的应用程序过早终止,传输将中止,因此将失败,因为此时尚未发送所有数据
要解决此问题,我可以在终止之前手动等待一段时间:
try
{
Thread.sleep(1000);
} catch (InterruptedException e)
{
e.printStackTrace();
}
然而,这种解决方案是不好的。是否有一些“最佳实践”方法可以确保在终止我的应用程序之前已发送所有数据
编辑:
我无权访问服务器代码
# 1 楼答案
数据是无缓冲的,因此每次写入都会立即发送数据。在你的情况下
flush()
什么都没做数据输出流。同花顺
调用OutputStream。同花顺
确保数据已发送的最佳方法是等待回复。让另一端发回一条消息,说它已经收到了数据,你可以退出,知道数据已经收到
顺便说一句,当你完成了一个可关闭的资源,最好的做法是关闭它
# 2 楼答案
Set
socket.setSendBufferSize(1024)
也要确保在那里接收时,你读取了1024
字节块# 3 楼答案
默认情况下
socket.close()
会导致TCP连接正常关闭。在该过程中,TCP堆栈将未确认的数据传递给对等方如果你把SO_LINGER设置为零,那么它就不起作用了。 另一种方法是使用
socket.shutdownOutput()
: