gpt4 book ai didi

C Socket服务器编程发送文件

转载 作者:太空宇宙 更新时间:2023-11-04 03:08:55 25 4
gpt4 key购买 nike

我目前在使用 C 套接字编程时遇到了麻烦。我需要使用以下 curl 命令作为客户端行为来从服务器请求文件。

curl -v SERVER_ADDRESS --request-target FILENAME 从服务器发送

到目前为止,我已经能够创建服务器、解析 header 并处理 PUT 请求。但是我在处理 GET 请求时遇到了问题,该请求正在将文件从服务器发送到客户端。我的代码不会在客户端创建、打开和写入文件。这是我无法解决的部分。

    //cl is value returned by accept()
fd = open(name, O_RDONLY);
if (fd<0){
write(cl, "HTTP/1.1 404 Not Found\r\n", sizeof("HTTP/1.1 404 Not Found\r\n"));
close(cl);
}
else{
contentLength = 0;
temp = read(fd, newbuffer, 32768);
while(temp>0){
write(cl, newbuffer, temp);
contentLength = contentLength+temp;
temp = read(fd, newbuffer, 32768);
}
sprintf(message, "HTTP/1.1 200 OK\r\nContent-Length: %d", contentLength);
strcat(message, "\r\n\r\n");
write(cl, message, sizeof(message));

感谢帮助。

最佳答案

HTTP header 包含状态行和 header 字段,包括 Content-length的 body 。 HTTP 正文必须跟在 header 之后。但是您的代码会打开文件并立即将内容写入客户端,只有在完成此操作后您才能写入 header 。换句话说:您在标题之前写正文,而不是在标题之后写正文。

除此之外写标题也是错误的:sizeof(message)不是消息的长度,而是缓冲区或指针的大小(不清楚,因为您显示的内容中没有声明 message)。

关于C Socket服务器编程发送文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58574496/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com