C语言-写一个简单的Web服务器(一)

基于TCP的web服务器

概述

C语言可以干大事,我们基于C语言可以完成一个简易的Web服务器。当你能够自行完成web服务器,你会对C语言有更深入的理解。对于网络编程,字符串的使用,文件使用等等都会有很大的提高。

关于网络的TCP协议在这里不在多说,大家可以查阅些资料。

工具

开发工具: CLion,编译器(Cygwin,如果不会用建议看看我的另一篇博客-CLion)。

演示效果图



复制代码
## 创建socket对象

```C
int server_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

if (0 > server_socket) {
    printf("[服务器] 创建socket对象失败,服务器启动失败...\n");
    return -1;
}
printf("[服务器] 创建socket成功....\n");

绑定服务器端口

c 复制代码
struct sockaddr_in my_addr;
bzero(&my_addr, sizeof(my_addr));
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(PORT);
my_addr.sin_addr.s_addr = htonl(INADDR_ANY);


int bind_ret = bind(server_socket, (struct  sockaddr*) &my_addr, sizeof(my_addr));

if (0 > bind_ret) {
    printf("[服务器]绑定端口%d失败,服务器启动失败\n", PORT);
    return -2;
}
printf("[服务器] 绑定端口:%d成功....\n", PORT);

监听服务器端口

c 复制代码
int listen_ret = listen(server_socket, BACK_LOG);
if (0 > listen_ret) {
    printf("监听端口:%d失败,服务器运行失败....\n", PORT);
    return -3;
}
printf("[服务器] 监听端口:%d成功....\n", PORT);

建立连接

c 复制代码
struct sockaddr_in accept_in;
socklen_t socklen = sizeof(accept_in);
int accept_socket = accept(server_socket, (struct sockaddr *) &accept_in, &socklen);

if (-1 == accept_socket) {
    printf("[服务器] 接收请求失败,建立连接失败... \n");
    return -4;
}
printf("[服务器] 建立连接成功....\n");

获取客户端请求

c 复制代码
char buffer[BUFFER_SIZE];
memset(buffer, 0, sizeof(buffer));
ssize_t data = recv(accept_socket, buffer, sizeof(buffer), RECV_FLAG);


if (data == 0) {
    printf("[服务器] 超时或对端主动关闭...\n");
    break;
}
if (0 > data) {
    printf("[服务器] 接收数据失败...\n");
    break;
}

printf("[服务器] 与客户端建立连接成功...\n");

启动服务器

c 复制代码
[服务器] 创建socket成功....
[服务器] 绑定端口:9999成功....
[服务器] 监听端口:9999成功....
[服务器] 建立连接成功....
[服务器] 与客户端建立连接成功...

下一回我们研究如何解析前端(浏览器)发过来的数据。

相关推荐
半梦半醒*1 分钟前
zabbix安装
linux·运维·前端·网络·zabbix
清羽_ls37 分钟前
React Hooks 核心规则&自定义 Hooks
前端·react.js·hooks
你的人类朋友43 分钟前
“签名”这个概念是非对称加密独有的吗?
前端·后端·安全
西陵1 小时前
Nx带来极致的前端开发体验——任务缓存
前端·javascript·架构
奔跑吧邓邓子1 小时前
【C语言实战(8)】C语言循环结构(do-while):解锁编程新境界
c语言·实战·do-while
板鸭〈小号〉1 小时前
Socket网络编程(2)-command_server
运维·服务器
小莞尔1 小时前
【51单片机】【protues仿真】基于51单片机温度测量系统
c语言·单片机·嵌入式硬件·物联网·51单片机
晓风凌殇1 小时前
单片机按键检测与长短按识别实现
c语言·单片机
10年前端老司机2 小时前
Promise 常见面试题(持续更新中)
前端·javascript
潘小安2 小时前
跟着 AI 学 (一)- shell 脚本
前端·ci/cd·vibecoding