Java Socket 延迟(续)

标签 java sockets

我通过这样的套接字发送 ascii:

outputStreamWriter(s + (char) 13);
outputStreamWriter.flush(); 

在现场,flush() 和通过网络发送的数据之间可能存在 10 到 30 秒的延迟(使用wireshark 进行验证)。

为了测试套接字连接,我使用这个:

public final boolean isConnected() {
  try {
    socket.sendUrgentData(32);
    return true;
  } catch (IOException e) {
    return false;
  }

当我摆脱 sendUrgentData 并在 isConnected() 中返回 true 时,延迟就会消失。

使用协议(protocol)分析器,我注意到我发送的大块数据最终被标记为紧急,就像我发送来测试套接字的单个字节一样。与直观相反的是,大型紧急数据包最终会被延迟。

有什么想法吗? 谢谢, 安德鲁

最佳答案

I am sending ascii over a socket like this:

outputStreamWriter(s + (char) 13);

不,你不是。该代码甚至无法编译。

In order to test the socket connection I use this

徒劳。这不会测试套接字连接。它只是发送一些输出。它遇到与仅写入输出相同的问题:套接字发送缓冲区、重试、超时、接收者的套接字接收缓冲区和接收窗口。它不会告诉您连接是否仍然良好。除了写入连接并捕获 IOException 之外,没有什么可以做到,这在断开连接后的第一次写入时肯定不会发生。

以任意间隔发送空格的另一个问题是接收者必须理解并忽略它们。是吗?

关于Java Socket 延迟(续),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7498851/

相关文章:

java - 解析文本文件: Efficiency and perfomance

java - 如何将 switch case 与字符串资源一起使用

java - 将 Android CameraX 桥接到 React Native

c - 'kill -9 进程 ID' 信号处理程序

mysqld_safe UNIX 套接字文件的目录 '/var/run/mysqld' 不存在

php - 使用 PHP 客户端连接到 websocket

python - soc.recv 到底返回什么?

java - 表中的行顺序

java - 生成系列并显示 1*3*5 + 2*5*8 + 3*7*11 的总和

使用 select() 调用的并发 UDP 服务器