[英]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.