gpt4 book ai didi

java - 等待套接字数据传输

转载 作者:太空宇宙 更新时间:2023-11-04 06:40:31 25 4
gpt4 key购买 nike

我使用 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();
}

但是,这个解决方案很糟糕。是否有一些“最佳实践”方法可以确保在终止我的应用程序之前已发送所有数据?

编辑:
我无权访问服务器代码。

最佳答案

If my application terminates too early, the transmission will be aborted and therefore fail since after the execution of flush() not all data has been sent yet.

数据是无缓冲的,因此每次写入都会立即发送数据。在您的情况下,flush() 没有执行任何操作。

DataOutputStream.flush()

public void flush() throws IOException {
out.flush();
}

调用OutputStream.flush()

public void flush() throws IOException {
}

Are there some "best practice" ways of assuring that all data has been sent before terminating my application?

确保数据已发送的最佳方法是等待回复。让另一端发回一条消息,表示已收到该消息,您可以退出知道已收到数据。

顺便说一句,当您使用完可关闭的资源后,最佳实践是关闭它。

关于java - 等待套接字数据传输,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24736602/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com