
第一个linux服务器
发布日期:2021-05-15 08:34:36
浏览次数:21
分类:精选文章
本文共 2558 字,大约阅读时间需要 8 分钟。
听说这是开发者亲自编写的服务器代码,虽然功能简单,但可以正常运行。这是最初版本的代码,虽然没有高级功能,但尽力做到最好。
服务器代码实现
代码主要是使用C语言编写的网络服务器,功能非常基础。以下是代码的主要部分:
#include#include #include #include #include #include #include #include #include #define HIDDEN #define VIEW "view/" #define MAXSIZE 1024*4 int getfd(char *name) { int fd; if (strcmp(name, "view/") == 0) { return -1; } fd = open(name, O_RDONLY); return fd; } int readio(int fd, char *back) { char buff[MAXSIZE]; bzero(buff, sizeof(buff)); int n = read(fd, buff, sizeof(buff)); strncpy(back, buff, n); close(fd); return n; } char *getpath(char *src, char *path) { char *p = strchr(src, '/'); p++; char *end = strchr(p, ' '); int n = end - p; strncpy(path, p, n); return path; } int main(int argc, char **argv) { if (argc < 3) { printf("error!\n"); exit(0); } char *ip = argv[1]; int port = atoi(argv[2]); int sockfd = socket(AF_INET, SOCK_STREAM, 0); struct sockaddr_in address; bzero(&address, sizeof(address)); address.sin_family = AF_INET; inet_pton(AF_INET, ip, &address.sin_addr); address.sin_port = htons(port); int flag = bind(sockfd, (struct sockaddr *)&address, sizeof(address)); flag = listen(sockfd, 5); struct sockaddr_in new_address; char buf[MAXSIZE]; char *str = "fuck you!"; char back[MAXSIZE]; int n = 0; while (1) { int len = sizeof(new_address); int new_sockfd = accept(sockfd, (struct sockaddr *)&new_address, &len); int size = recv(new_sockfd, buf, sizeof(buf), 0); buf[size] = '\0'; int x = n++; printf "[%d]start----------------------------------------------------------------\n\n\n", x); printf("buf: %s\n", buf); char remote[INET_ADDRSTRLEN]; char *new_ip = inet_ntop(AF_INET, &new_address.sin_addr, remote, INET_ADDRSTRLEN); printf("new_ip: %s\n", new_ip); printf("new_port: %d\n\n\n", ntohs(new_address.sin_port)); printf "[%d]over-----------------------------------------------------------------\n\n\n", x); bzero(back, sizeof(back)); char path[128]; bzero(path, sizeof(path)); getpath(buf, path); if (strcmp(path, "favicon.ico") == 0) { continue; } char local[128]; bzero(local, sizeof(local)); #ifdef HIDDEN sprintf(local, "%s%s", VIEW, path); #else sprintf(local, "%s", path); #endif int fd = getfd(local); if (fd < 0) { strcpy(back, "no this page!!!"); } else { readio(fd, back); } // send response back to client // ... close(new_sockfd); close(sockfd); return 0; } }
服务器编译与运行
编译命令:
gcc server.c -o server.bin
运行命令:
./server.bin 127.0.0.1 999
使用说明
argv[1]
表示指定的本机地址argv[2]
指定服务器的端口号如何使用:
http://127.0.0.1:999/*.html
访问路径 点击访问即可查看效果
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2025年04月27日 23时32分51秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
ubuntu16.04下系统配置
2019-03-12
国内有哪些比较靠谱的云服务器?
2019-03-12
Java中有几种基本数据类型?它们分别占多大字节?
2019-03-12
Java中基本类型的转换规则
2019-03-12
Mapper 接口方法如何与注解里的 SQL 进行绑定的?
2019-03-12
python安装和配置(win10)
2019-03-12
重构函数(1)条件合并
2019-03-12
2020编码大赛(1)题目
2019-03-12
BitChanger语言
2019-03-12
Pythagorea(3)第16-21章
2019-03-12
纪念碑谷(1-5章)
2019-03-12
基数树(radix tree)
2019-03-12
58Q游戏(4)73(5)85(6)98(7)
2019-03-12
独立钻石棋详解
2019-03-12
106 多米诺骨牌(12)119(8)130(9)142(10)150(11)
2019-03-12
点亮细胞171-180
2019-03-12
C++ Primer Plus读书笔记:c++字符串
2019-03-12
CSU 1757: 火车入站(区间覆盖的最大覆盖深度)
2019-03-12
C++ Primer Plus读书笔记:循环读取(错误处理)
2019-03-12