Java套接字无法发送双字节数组

Java套接字无法发送双字节数组,java,sockets,Java,Sockets,我试图通过Java套接字发送两字节数组。我通过wireshark捕获了数据,它显示第一个字节数组发送;然而,第二个根本不发送。 我使用的是LinuxMint和Oracle的JRE(不是OpenJDK) 因此,dos.write(数据包_-one)可以工作(由wireshark确认)。写第二个包不起作用。数据长度返回0,因为我也不再接收数据。没有错误或异常被捕获 我也尝试过使用dos.flush(),但没有什么不同 你知道为什么会出现这种情况吗?也许你在有时间发送缓冲字节之前就退出了程序 如果您添

我试图通过Java套接字发送两字节数组。我通过wireshark捕获了数据,它显示第一个字节数组发送;然而,第二个根本不发送。 我使用的是LinuxMint和Oracle的JRE(不是OpenJDK)

因此,dos.write(数据包_-one)可以工作(由wireshark确认)。写第二个包不起作用。数据长度返回0,因为我也不再接收数据。没有错误或异常被捕获

我也尝试过使用dos.flush(),但没有什么不同


你知道为什么会出现这种情况吗?

也许你在有时间发送缓冲字节之前就退出了程序

如果您添加以下内容:

for (;;) {
    final byte x = dis.readByte();
    System.out.println("got byte: " + (x & 0xFF));
}
程序将不会退出,您还将看到服务器是否返回了更多字节。可能会提供线索

如果您不知道,readInt()读取字节并返回由这些字节生成的整数,如果读取的所有字节都为零,则该整数为0。所以你的评论“没有收到更多的数据”感觉有点模棱两可

您也可以尝试插入

sck.setTcpNoDelay(true);
在创建套接字之后。然后,写入操作应立即在网络上进行。我想


希望这有帮助。

您能发布接收者/客户代码吗?这是客户代码。服务器的源代码不在我的控制范围内。make dos.flush();为了强制写入数据,我还尝试了dos.flush()。在这种情况下,这似乎没有什么区别。如果第一次写入()有效,而刷新die outputstream没有任何区别,请在第一次写入后关闭流,然后再次打开它以发送第二个包。
sck.setTcpNoDelay(true);