簡體   English   中英

協議消息包含無效標簽0

[英]Protocol message contained an invalid tag 0

我的目標是創建一個實時服務警報提要,並將其發送到我用Java發布的帶有HTTP發布請求的服務器上。 我要做的第一步是創建此處發布的示例警報提要的副本,由於能夠將其打印出消息,因此我似乎能夠成功做到這一點。 https://developers.google.com/transit/gtfs-realtime/examples/alerts

我要做的下一步是創建HTTP連接,並通過POST請求發送供稿。 這是我的客戶代碼中的內容,此處的示例是Feed名稱。

String url = "https://localhost:8080";
URL obj = new URL(url);
HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();
//add reuqest header
con.setRequestMethod("POST");
con.setRequestProperty("User-Agent", "Mozilla/5.0");
con.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
con.setRequestProperty("Content-Type", "application/x-protobuf");
con.setDoOutput(true);
DataOutputStream wr = new DataOutputStream(con.getOutputStream());
example.build().writeDelimitedTo(wr);
wr.flush();
wr.close();

到目前為止,我的服務器代碼就是這樣。

ServerSocket server = new ServerSocket(8080); 
System.out.println("Listening for connection on port 8080 ...."); 
while (true) { 
    try (Socket socket = server.accept()) {
      FeedMessage feed = FeedMessage.parseDelimitedFrom(socket.getInputStream());
      Date today = new Date(); 
      String httpResponse = "HTTP/1.1 200 OK\r\n\r\n" + today; 
      socket.getOutputStream().write(httpResponse.getBytes("UTF-8")); 
      }     
} 

這里的問題是我在服務器端收到的協議消息包含無效標記0。 在解決此問題上,我需要一些幫助。 也許我沒有正確解析它。

更新#2

我已經嘗試解析HTTP標頭來獲得有效負載,如評論所說。 但是我的代碼掛起了,在終端上打印標題的輸出看起來已經序列化了。

    DataInputStream isr = new DataInputStream(socket.getInputStream());
    Reader reader = new InputStreamReader(isr); 
    BufferedReader reader2 = new BufferedReader(reader);  
    String line = reader2.readLine();
    System.out.println("get lines");
    while (!line.isEmpty()) { 
         System.out.println(line); 
         line = reader2.readLine(); 
     }

您正在服務器上處理原始套接字,但是有效負載已編碼在http請求正文中。 您將需要解析http請求到有效負載,並且當您只有body時 :將其發送到protobuf。 現在,您正在將http標頭發送到protobuf,這沒有任何意義。 這可能意味着解析到\\r\\n\\r\\n ,但是如果您可以使用content-length標頭,則將有所幫助,如果可以使用預構建的http庫,則更好。

暫無
暫無

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

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