【发布时间】:2013-07-26 16:20:16
【问题描述】:
我正在尝试使用套接字来获取一个小型 JSON 测试文件,该文件托管在我的网站 (http://a-cstudios.com/text.json) 上。当我这样做时
long numbytes;
char *request = malloc(sizeof(char) * 300);
sprintf(request, "GET %s \r\nHOST:%s \r\n\r\n", restOfURL, baseServer);
// restOfURL = "/text.json" baseServer = "www.a-cstudios.com"
send(sockfd, request, strlen(request) + 1, 0);
char buf[1024];
if ((numbytes = recv(sockfd, buf, 1024-1, 0)) == -1) {
perror("recv");
}
我收到recv: connection reset by peer。但是如果我使用相同的代码,其中restOfURL 是/index.html 并且baseServer 是www.google.com,这工作正常,buf 将包含index.html 的文本。为什么这不适用于我网站上的文件?
【问题讨论】:
-
GET 请求不是也需要
HTTP/1.1(或1.0)结尾吗? -
您正在发送无效的 HTTP 并且主机正在关闭连接。你把 HTTP/1.1 放在正确的地方了吗?为什么使用 malloc() 而不是在堆栈上分配数组?
-
@EJP 和 Kninnug 感谢您指出这一点,这确实解决了问题。如果你们中的一个人将其作为答案发布,我会接受。
-
@ChrisLoonam BTW,
sizeof(char)每个定义 == 1。