0

我需要发送一个分为两部分的二进制消息:

  1. 第一部分是 4 个字节,它有一些信息(比如一个整数)
  2. 第二部分有一个 XMLtext 流。

我以前从来没有做过这样的事情,我该怎么做?

我的代码是这样的:

public String serverCall(String link, String data){
         HttpURLConnection connection;
         OutputStreamWriter writer = null;

         URL url = null;
         String parameters = data;

         try
         {
             url = new URL(link);
             connection = (HttpURLConnection) url.openConnection();
             connection.setDoOutput(true);
             connection.setRequestProperty("Content-Type", "text/xml");
             connection.setRequestMethod("POST");    

             writer = new OutputStreamWriter(connection.getOutputStream());
             writer.write(parameters);
             writer.flush();
             writer.close();
          }
          catch(IOException e)
          {
              e.printStackTrace();
          }
}

如何将 XML 设置为 4 个字节,以及如何在它之前有 4 个字节的文本?

4

2 回答 2

1

(信息)HTTP 协议使用 PUT 方法“在服务器上传输文件”(而不是 POST)。

二进制数据的传输最好不要有内容类型“text/...”,而是“application/bin”。

但是,您可以将 XML 作为“text/xml; charset=UTF-8”发送,并使用您自己的标头

connection.setHeader("MyCode",
    String.format("%02x%02x%02x%02x", bytes[0], bytes[1], bytes[2], bytes[3]));

如果您以二进制形式发送所有内容,请不要使用 Writer(将字节转换为某种字符编码),而是使用 Stream (BufferedOutputStream)。XML为:

byte[] xmlBytes = xml.getBytes("UTF-8");

UTF-8 如果在<?xml ...>.

close()已经冲洗,所以不需要flush()

于 2013-09-11T13:17:13.163 回答
0

如果您的消息的二进制部分只有 4 个字节,请对其进行百分比编码并将其作为附加的 url 参数发送。或者,将其添加到现有的 xml 流中。

java类UriURLEncoder提供必要的方法。

于 2013-09-11T13:05:20.883 回答