2011-03-21 63 views
1

我想实现C中的客户端的SSL按所给here的例子(你可以直接看到源代码here),输入“request_len”被发送到SSL服务器的计算公式为 -OpenSSL请求长度 - 如何计算大小?

request_len=strlen(REQUEST_TEMPLATE)+ strlen(host)+6; 

有人可以告诉我为什么“6”被添加到长度?

回答

3

这是空间的端口号和空终止符。端口范围在0-65535之间,所以最多可以包含5个字符。字符串必须以1个字符的空终止符结束。所以5 + 1 = 6

要弄清楚这一点,你必须看看他们在哪里填写请求。我把它分开了,这样你就可以看到参数是如何排列的。在REQUEST_TEMPLATE里面有一个%s,它被主机取代,一个%d被端口取代。

request_len =   strlen(REQUEST_TEMPLATE) + strlen(host) + 6; 
...         |     |  | 
snprintf(request,request_len, REQUEST_TEMPLATE,   host, port); 

奖金信息:

然后,他们做的另一strlen的找出请求有多大,因为端口可能已不足5个字符。

request_len=strlen(request); /* inefficient */ 

strlen不是必须的,因为snprintf()返回它构建的字符串的长度。

request_len = snprintf(request, request_len, REQUEST_TEMPLATE, host, port); /* efficient */ 
+0

谢谢!非常详细的和点对点的答案。 – user375868 2011-03-21 21:16:28