can socket.getInputStream()。read()在没有read()的情况下保持发送后读取所有数据?

时间:2015-08-11 02:42:06

标签: java sockets

我有一个网络应用程序并且有一个难题:

如果我发送数据(socket.getOutputStream.write())多次次而没有调用socket.getInputStream().read()? 分钟后 可以socket.getInputStream().read()读取所有已发送数据的所有数据吗?

如果可以的话,如果发送过多的缓冲区,如果发送的数据太大而无法持续数分钟或数小时?

3 个答案:

答案 0 :(得分:1)

是。您将读取写入套接字的任何内容,或者终止连接。如果您没有收到错误,那么您将始终阅读您撰写的所有内容。

如果您填写了可用的缓冲区空间,那么发送方write调用将等待,直到有更多缓冲区空间。它不会引发错误。

答案 1 :(得分:1)

是。只要套接字仍处于打开状态,因为TCP套接字提供reliable transmission

实际上,套接字可能是forced closed。但是,强制服务器使用大量内存缓冲区是DDOS攻击中的常见载体。

答案 2 :(得分:0)

是的,但如果您从未从套接字读取过,则发件人可能会阻止,这可能会阻止其读取,这可能会阻止您的写入。

这不是一个好主意。如果对等方正在发送响应,请按应用程序协议的要求读取它们。