簡體   English   中英

Java套接字無法發送兩個字節數組

[英]Java socket unable to send two byte arrays

我正在嘗試通過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。 因此,您的評論是“沒有收到更多數據”。 感覺有點big昧。

您也可以嘗試插入

sck.setTcpNoDelay(true);

創建套接字后。 然后應立即在網絡上寫入。 我認為。

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM