簡體   English   中英

發送高級ascii槽式套接字java

[英]Send exctended ascii trough socket java

目前,我正忙於編寫一個將十六進制流發送到客戶端的小程序。

現在我要做的是拆分流,並將每2位轉換為一個char。 我的輸出轉換回字符串,以便我可以發送數據。 為了進行調試,我使用wireshark來查看發送的數據是否正確。

但這是不正確的。 而且我知道為什么。 因為例如我使用b7(dec 183),而char只支持到127。但是現在的問題是,我不知道如何解決問題..

您能幫我解決我的代碼嗎? 謝謝 !

ServerSocket welcomeSocket2 = new ServerSocket(9999);
   Socket socket2 = welcomeSocket2.accept();  
   OutputStream os3 = socket2.getOutputStream();
   OutputStreamWriter osw3 = new OutputStreamWriter(os3);
   BufferedWriter bw3 = new BufferedWriter(osw3);



String hex4 = "00383700177a01020a6cb7000000000000018fffffff7f030201000a080000000000000000184802000007080444544235508001000002080104";

   StringBuilder output4 = new StringBuilder();
   for (int i =0; i< hex4.length(); i +=2){
       String str4 = hex4.substring(i, i+2);
       int outputdecimal = Integer.parseInt(str4,16);
       char hexchar = (char)outputdecimal;
       System.out.println(str4);
       output4.append(hexchar);
   }

 bw3.write(output4.toString());

這就是我在wireshark中得到的:

0000   00 38 37 00 17 7a 01 02 0a 6c c2 b7 00 00 00 00
0010   00 00 01 c2 8f c3 bf c3 bf c3 bf 7f 03 02 01 00
0020   0a 08 00 00 00 00 00 00 00 00 18 48 02 00 00 07
0030   08 04 44 54 42 35 50 c2 80 01

但是我必須在wireshark中獲取的正確數據是:

0000   00 38 37 00 17 7a 01 02 0a 6c b7 00 00 00 00 00
0010   00 01 8f ff ff ff 7f 03 02 01 00 0a 08 00 00 00
0020   00 00 00 00 00 18 48 02 00 00 07 08 04 44 54 42
0030   35 50 80 01 00 00 02 08 01 04

另外,如果要將字節寫入套接字,則可以直接執行此操作,而不必與字符編碼和文本之間的轉換達成額外協議。

Java中沒有未簽名的字節。 但是, byte[]通常用於傳輸原始數據。

樣本數據:

byte[] data = { 0x00, 0x01, 0x7f, (byte)0x80, (byte)0xfe, (byte)0xff };

(Java中沒有byte文字。在強制轉換時,使用強制轉換語法將字面值從int強制轉換為byte 。)

FilterOutputStream有一種方便的方法將字節數組寫入輸出流。

ServerSocket welcomeSocket2 = new ServerSocket(9999);
Socket socket2 = welcomeSocket2.accept();  
OutputStream os3 = socket2.getOutputStream();

FilterOutputStream out = new FilterOutputStream(os3);
out.write(data);

暫無
暫無

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

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