Java:使用DataOutputStream写入套接字的速度减慢,然后停止

Java:使用DataOutputStream写入套接字的速度减慢,然后停止,java,sockets,buffer,send,Java,Sockets,Buffer,Send,这段代码将愉快地运行大约3秒钟,然后变慢,然后停止 i结束于大约16491,不再继续增加。这是怎么回事?它正在变慢,因为在接收端,在读取下一个值之前,您可能正在使用发送的值执行长任务。因此,另一方读取数据的速率小于您向另一方发送数据的速率。这将继续填充另一端的接收缓冲区和发送方端的发送缓冲区。最终,当两个缓冲区都被完全填满时,数据传输将停止。您的流将在哪里结束?@bmorris591不太清楚您的意思。我对Java套接字非常陌生,我只是在编写一个简单的项目。那么你是在编写套接字?另一端是什么?另一

这段代码将愉快地运行大约3秒钟,然后变慢,然后停止


i
结束于大约
16491
,不再继续增加。这是怎么回事?

它正在变慢,因为在接收端,在读取下一个值之前,您可能正在使用发送的值执行长任务。因此,另一方读取数据的速率小于您向另一方发送数据的速率。这将继续填充另一端的接收缓冲区和发送方端的发送缓冲区。最终,当两个缓冲区都被完全填满时,数据传输将停止。

您的流将在哪里结束?@bmorris591不太清楚您的意思。我对Java套接字非常陌生,我只是在编写一个简单的项目。那么你是在编写套接字?另一端是什么?另一端可能没有读取数据,缓冲区被填满了吗?@bmorris591另一端是Python,我一直在从中读取数据。你是如何持续读取的?代码阻塞在哪里?但只要我继续读取值,
I
应缓慢增加。缓冲区满后,接收器将首先清除已满的缓冲区,而且发送会首先清除发送缓冲区。在有足够的缓冲区可用之前,TCP会停止传输,然后再继续传输,但传输速度非常慢。但它不仅运行速度非常慢,根本不会运行。我告诉过你。。在两个缓冲区都已满的一定时间后,TCP停止传输。如果让程序长时间运行,您会看到
i
的值再次增加,但速度非常缓慢,然后再次停止。
while (true) {
    loc = getLocationOnScreen();

    out.writeLong((long)loc.getX());
    out.writeLong((long)loc.getY());
    out.flush();

    i++;
    System.out.println(i);

}