我正在尝试在C中实现SSL客户端。根据给出的示例here(您可以直接看到源代码here),将“request_len”输入发送到SSL服务器计算为 -
request_len=strlen(REQUEST_TEMPLATE)+ strlen(host)+6;
有人可以告诉我为什么“6”被加长?
答案 0 :(得分: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 */