簡體   English   中英

通過套接字發送字節(Java Servlet到C)

[英]Sending bytes over socket (Java Servlet to C)

我在C端有一個SSL函數,該函數僅接收發送的確切字節數。 問題是我正在從servlet發送具有不同字節長度的字符串和JSON。

我的方法:我先發送每個字符串的長度,然后發送實際消息。

         //For Json String (349 bytes)

            outputstreamwriter.write(jsonLength);
            outputstreamwriter.write(jsonData);
            outputstreamwriter.flush();

    // For other request strings

    final String path = request.getPathInfo();

    String all_Users = "GET ALL USERS";
    String user_length = Integer.toString(all_Users.length());

    String all_Keys = "GET ALL KEYS";
    String key_length = Integer.toString(all_Keys.length());

    if (path == null || path.endsWith("/users")) 
    {       outputstreamwriter.write(user_length);  
            outputstreamwriter.write(all_Users);    

    } 
    else if (path.endsWith("/keys")) {
        outputstreamwriter.write(key_length);
        outputstreamwriter.write(all_Keys); 
    } 

在C端:我首先讀取傳入字節長度的傳入字節,然后再次調用該函數以期望該消息。 現在,我的Json是349,而其他請求是12。這些分別是3和2個字節。

  debug_print("Clearing Buffer\n", NULL);
  memset(inBuf, 0, 1024);

  ssl_recv_exactly(rs_ssl, inBuf, 2, &ssllog))

  lengthValue = atoi(inBuf);
  printf("successfully received %d bytes of request:\n<%s>\n", lengthValue, inBuf);
             }

        if (lengthValue == 13)
        {
         // Call this function


        else if (lengthValue == 12)
                {
                     // call this function
                              }

當前解決方案:我在2個字節的請求中添加了一個零,以使它們變為3個字節。 有更聰明的方法嗎?

按照Serge和Drew的建議,我可以使用Binary方法做到這一點。 這是我以二進制格式發送字符串的方法:

    String user_length = String.format("%9s", 
    Integer.toBinaryString(all_Users.length()).replace(' ', '0'));

暫無
暫無

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

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