使用Socket实现一个简单 的HttpServer

1,162 阅读2分钟

前言

一直以来,对Socket的理解一直处于很简单的理解的一个层面,一直都不能将tcp和http建立联系,某一次偶然发现VLC居然能将视频从电脑发送到手机,于是看了VLC的代码,发现是使用CocoaHttpServer来实现的,是在手机上开启了一个服务器,然后通过浏览器将视频发送到手机,然后再使用VLC自己的播放器播放.
CocoaHttpServer

过程

CocoaHttpServer的代码自己阅读起来还是比较费劲,于是乎就想自己先简单的实现一个Server来为我阅读代码提供帮助,在各方面查资料的情况后代码如下,这里不介绍socket编程各个函数的功能,网上有很多很好的文章介绍,只放一下全代码。

#include "httpServer.h"
#include <sys/socket.h>
#include <arpa/inet.h>
#include <string.h>
#include <unistd.h>


#define SOCKET_PORT 8081

void startHttpServer(void){
    int fd = socket(AF_INET, SOCK_STREAM, 0);
    struct sockaddr_in server_addr;
    bzero(&server_addr, sizeof(struct sockaddr_in));
    server_addr.sin_family  =  AF_INET;
    server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
    server_addr.sin_port = htons(SOCKET_PORT);
    
    bind(fd, (struct sockaddr *)&server_addr, sizeof(server_addr));
    listen(fd, 5);
    
    int client_fd = accept(fd, NULL,  NULL);
    char buff[1024];
    read(client_fd, buff, sizeof(buff));
    
    printf("%s\r\n", buff);
    
    char data[] = "HTTP/1.0 200 OK\r\nServer: DWBServer\r\nContent-Type: text/html;charset=utf-8\r\n\r\n<html><body><div>C语言实现简单的HttpServer</div></body></html>";
    write(client_fd, data, sizeof(data));
    close(client_fd);
    close(fd);
}

运行效果

直接在浏览器中访问我们开启的服务就行,必须要 同一个wifi下。

总结

其实对于http协议来说,就是按照既定的规则拼接内容,然后客户端(浏览器)按照既定的解析规则去解析而已,没有什么神秘的东西。而最近在看MacOverview的源码时,体会最深的也是都是按照既定的规则来解析,这就是"协议".