我有一个网络应用程序并且有一个难题:
如果我发送数据(socket.getOutputStream.write())多次次而没有调用socket.getInputStream().read()
?
分钟后。
可以socket.getInputStream().read()
读取所有已发送数据的所有数据吗?
如果可以的话,如果发送过多的缓冲区,如果发送的数据太大而无法持续数分钟或数小时?
答案 0 :(得分:1)
是。您将读取写入套接字的任何内容,或者终止连接。如果您没有收到错误,那么您将始终阅读您撰写的所有内容。
如果您填写了可用的缓冲区空间,那么发送方的write
调用将等待,直到有更多缓冲区空间。它不会引发错误。
答案 1 :(得分:1)
是。只要套接字仍处于打开状态,因为TCP套接字提供reliable transmission。
实际上,套接字可能是forced closed。但是,强制服务器使用大量内存缓冲区是DDOS攻击中的常见载体。
答案 2 :(得分:0)
是的,但如果您从未从套接字读取过,则发件人可能会阻止,这可能会阻止其读取,这可能会阻止您的写入。
这不是一个好主意。如果对等方正在发送响应,请按应用程序协议的要求读取它们。