通过套接字发送字节(Javaservlet到C)

通过套接字发送字节(Javaservlet到C),java,c,json,sockets,servlets,Java,C,Json,Sockets,Servlets,我的C端有一个SSL函数,它只接收发送的确切字节数。问题是我正在从servlet发送不同字节长度的字符串&JSON 我的方法是:首先发送每个字符串的长度,然后发送实际消息 //For Json String (349 bytes) outputstreamwriter.write(jsonLength); outputstreamwriter.write(jsonData); outputstreamwr

我的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字节请求中添加一个0,使它们变成3字节。有更聪明的方法吗?

按照Serge和Drew的建议,我可以用二进制方法来实现。以下是我如何以二进制格式发送字符串:

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

将长度作为二进制数而不是数字字符串发送可能会更容易。。对我同意你的看法。我可以将它们作为int发送。长度作为二进制更有效,但我建议您使用网络顺序来避免endianness问题……尝试Integer.toBinaryStringjson_Data.Length。你建议我把它作为一个字符串发送吗?还是有别的办法?