gpt4 book ai didi

java - 数据何时真正通过socket发送?

转载 作者:行者123 更新时间:2023-12-02 06:48:41 26 4
gpt4 key购买 nike

我正在使用 Java 套接字在两台机器之间进行通信。因此,当服务器收到消息时,它会处理该消息并回复另一条消息。我使用的是TCP协议(protocol)。

我的问题是,假设网络速度很慢。然后,在发送消息后,如果我立即调用套接字的 InputStream.available() 方法,我会获得从服务器到套接字的实际可用字节吗?

即使消息非常大,InputStream.available() 也总是返回从服务器发送的完整字节数吗?我听说TCP有数据包限制,那么这会影响InputStream.available()吗?

最佳答案

您几乎永远不会立即从服务器获得可用的字节(您的客户端应用程序检查输入流的速度远远快于任何网络传输数据的速度,并且服务器可以处理和发送响应)。

不,您不能保证非零 available() 调用将返回服务器响应的整个大小。引用javadoc:

Returns an estimate of the number of bytes that can be read (or skipped over) from this input stream without blocking by the next invocation of a method for this input stream.The next invocation might be the same thread or another thread. A single read or skip of this many bytes will not block, but may read or skip fewer bytes.

Note that while some implementations of InputStream will return the total number of bytes in the stream, many will not. It is never correct to use the return value of this method to allocate a buffer intended to hold all data in this stream.

关于java - 数据何时真正通过socket发送?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18306288/

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