第一个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

    访问路径 点击访问即可查看效果

    上一篇:linux服务器编程初步
    下一篇:《Linux内核修炼之道》精华版之方法论

    发表评论

    最新留言

    网站不错 人气很旺了 加油
    [***.192.178.218]2025年04月27日 23时32分51秒