java - Java套接字无法发送两个字节数组

标签 java sockets

我正在尝试通过Java套接字发送两个字节数组。我已经通过Wireshark捕获了数据,它表明第一个字节数组已发送;但是,第二个根本不发送。
我正在使用Linux Mint和Oracle的JRE(不是OpenJDK)。

byte[] packet_one = new byte[] {(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x50};
byte[] packet_two = new byte[] {(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x78};
Socket sck;
DataInputStream dis;
DataOutputStream dos;

try {
sck = new Socket(IP_ADDRESS,PORT);    
dis = new DataInputStream(sck.getInputStream());     
dos = new DataOutputStream(sck.getOutputStream());

int recv_header = dis.ReadInt(); // This receives the correct response.

dos.write(packet_one); // Sends fine.

dos.write(packet_two); //Does not send.

int data_length = dis.readInt(); // No more data received.

}catch(Exception e) {
 System.out.println("Error: " + e.getMessage());    
}

因此,dos.write(packet_one)有效(由wireshark确认)。编写packet_two不起作用。由于我也未收到任何数据,因此data_length返回0。没有错误或异常被捕获。

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

关于为什么可能会出现这种情况的任何想法?

最佳答案

也许您是在没有时间发送缓冲字节之前退出程序的?

也许如果您添加类似的内容:

for (;;) {
    final byte x = dis.readByte();
    System.out.println("got byte: " + (x & 0xFF));
}

该程序将不会退出,您还将看到服务器是否还发送了更多的字节。可能会提供线索。

并且,如果您不知道,readInt()读取字节并返回由这些字节组成的int,如果所有读取的for字节均为零,则为0。因此,您的评论是“没有收到更多数据”。感觉有点模棱两可。

您也可以尝试插入一个
sck.setTcpNoDelay(true);

创建套接字后。然后应立即在网络上写入。我认为。

希望这可以帮助。

关于java - Java套接字无法发送两个字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34923566/

相关文章:

java - 将项目添加到多维 ArrayList

java - jackson .当值从泛型类获取时出现 ClassCastException

java - Android,使用 Retrofit 填充无尽 ListView 数据的最佳方法?

python - 尝试连接到 FTP 站点但收到错误的 SSL 版本号错误?

c++ - "main"循环的聊天服务器设计

sockets - Indy - ReadLnSplit 关闭时导致 NotConnected 异常

java - 比较 Java 中的堆栈弹出和队列出队(回文)

java - 如何获取单链表来对十六进制数字进行排序

ios - 创建一个通过 Swift 3 (iOS) 中的套接字接收数据的 InputStream

vb.net - 如何在在线RTS游戏中同步主机和客户端的游戏? (VB.NET)