我正在尝试在 C 中创建一个简单的非并发 Web 服务器。通过在我的 Web 浏览器中打开特定页面(本地主机:54321)。这将连接到我用 C 语言编写的服务器程序,该程序作为回报将发送回一个网页以供浏览器显示。
这是我的代码的摘录:
void reply(char *mesg, int connfd, struct sockaddr_in servaddr, socklen_t len)
{
FILE *fp;
char token1[256];
char *token2;
char response[2048];
char *file;
char *type;
char c_type[50];
char content[2048];
sscanf(mesg, "GET %s HTTP/1.1", file);
if(strcmp(file, "/") == 0){
fp = fopen("index.html", "r");
sprintf(c_type, "text/html");
fgets(content, 256, fp);
while(!feof(fp)){
fgets(token1, 256, fp);
strcat(content, token1);
}
sprintf(response,"HTTP/1.1 200 OK\r\n Content-type:%s\r\n Content-length: %d\r\n\r\n%s", c_type, strlen(content), content);
sendto(connfd,response,strlen(response),0,(const struct sockaddr *)&servaddr,len);
fclose(fp);
}else{
token2 = strsep(&file, "/");
fp = fopen(file, "r");
if(fp == NULL){\
sprintf(c_type, "text/html");
sprintf(content, "<html><body> <h1> ERROR: %s does not exist! </h1> </body></html>", file);
sprintf(response,"HTTP/1.1 200 OK\r\n Content-type:%s\r\n Content-length: %d\r\n\r\n%s", c_type, strlen(content), content);
sendto(connfd,response,strlen(response),0,(const struct sockaddr *)&servaddr,len);
}else{
type = file;
token2 = strsep(&type, ".");
if(strcmp(type, "html") == 0){
sprintf(c_type, "text/html");
}else if(strcmp(type, "css") == 0){
sprintf(c_type, "text/html");
}else{
sprintf(c_type, "image/%s", type);
}
fgets(content, 256, fp);
while(!feof(fp)){
fgets(token1, 256, fp);
strcat(content, token1);
}
sprintf(response,"HTTP/1.1 200 OK\r\n Content-type:%s\r\n Content-length: %d\r\n\r\n%s", c_type, strlen(content), content);
sendto(connfd,response,strlen(response),0,(const struct sockaddr *)&servaddr,len);
}
fclose(fp);
}
当我运行它时,我的程序遇到了分段错误。fgets()
如果您对我如何解析文件中的数据有任何想法/意见/建议,我相信这是由于我的使用。谢谢你。