1
我想实现C中的客户端的SSL按所给here的例子(你可以直接看到源代码here),输入“request_len”被发送到SSL服务器的计算公式为 -OpenSSL请求长度 - 如何计算大小?
request_len=strlen(REQUEST_TEMPLATE)+ strlen(host)+6;
有人可以告诉我为什么“6”被添加到长度?
我想实现C中的客户端的SSL按所给here的例子(你可以直接看到源代码here),输入“request_len”被发送到SSL服务器的计算公式为 -OpenSSL请求长度 - 如何计算大小?
request_len=strlen(REQUEST_TEMPLATE)+ strlen(host)+6;
有人可以告诉我为什么“6”被添加到长度?
这是空间的端口号和空终止符。端口范围在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 */
谢谢!非常详细的和点对点的答案。 – user375868 2011-03-21 21:16:28