繁体   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