首页 > 其他分享 >实验四 Web服务器2

实验四 Web服务器2

时间:2023-12-07 23:23:05浏览次数:30  
标签:Web addr int 实验 address 服务器 include socket


实验四 Web服务器2

基于华为鲲鹏云服务器CentOS中(或Ubuntu),使用Linux Socket实现:
1. Web服务器的客户端服务器,提交程序运行截图
2. 实现GET即可,请求,响应要符合HTTP协议规范
3. 服务器部署到华为云服务器,浏览器用本机的
4. 把服务器部署到试验箱。(加分项)

web_server.c

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 #include <sys/socket.h>
 5 #include <netinet/in.h>
 6 #include <unistd.h>
 7 
 8 void handle_client(int client_socket) {
 9     char response[] = "HTTP/1.1 200 OK\nContent-Type: text/html\n\n<html><body><h1>Hello, this is a simple web server!</h1></body></html>\n";
10     send(client_socket, response, strlen(response), 0);
11     close(client_socket);
12 }
13 
14 int main() {
15     int server_fd, new_socket;
16     struct sockaddr_in address;
17     int opt = 1;
18     int addrlen = sizeof(address);
19     
20     if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
21         perror("socket failed");
22         exit(EXIT_FAILURE);
23     }
24     
25     if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt))) {
26         perror("setsockopt");
27         exit(EXIT_FAILURE);
28     }
29     
30     address.sin_family = AF_INET;
31     address.sin_addr.s_addr = INADDR_ANY;
32     address.sin_port = htons(8080);
33     
34     if (bind(server_fd, (struct sockaddr *)&address, sizeof(address))<0) {
35         perror("bind failed");
36         exit(EXIT_FAILURE);
37     }
38     
39     if (listen(server_fd, 3) < 0) {
40         perror("listen");
41         exit(EXIT_FAILURE);
42     }
43   
44     while (1) {
45         if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen))<0) {
46             perror("accept");
47             exit(EXIT_FAILURE);
48         }
49         handle_client(new_socket);
50     }
51     return 0;
52 }

web_client.c

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 #include <sys/socket.h>
 5 #include <netinet/in.h>
 6 #include <unistd.h>
 7 #include <arpa/inet.h>
 8 
 9 int main() {
10     struct sockaddr_in serv_addr;
11     int sock = 0, valread;
12     char buffer[1024] = {0};
13     if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
14         printf("\n Socket creation error \n");
15         return -1;
16     }
17     serv_addr.sin_family = AF_INET;
18     serv_addr.sin_port = htons(8080);
19     if(inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr)<=0) {
20         printf("\nInvalid address/ Address not supported \n");
21         return -1;
22     }
23     if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {
24         printf("\nConnection Failed \n");
25         return -1;
26     }
27     char message[] = "GET / HTTP/1.1\r\nHost: localhost\r\nConnection: close\r\n\r\n";
28     send(sock, message, strlen(message), 0);
29     
30     while ((valread = read(sock, buffer, 1023)) > 0) {
31         buffer[valread] = '\0';
32         printf("%s", buffer);
33     }
34     
35     return 0;
36 }

运行截图:

 

标签:Web,addr,int,实验,address,服务器,include,socket
From: https://www.cnblogs.com/20211115fyq/p/17884234.html

相关文章

  • 实验四 Web服务器2
    server.c#include<stdio.h>#include<stdlib.h>#include<string.h>#include<unistd.h>#include<sys/types.h>#include<sys/socket.h>#include<netinet/in.h>#definePORT8080#defineBUFFER_SIZE1024intmain(){   int......
  • 构建用于复杂数据处理的高效UDP服务器和客户端
    title:构建用于复杂数据处理的高效UDP服务器和客户端banner_img:https://cdn.studyinglover.com/pic/2023/12/334c0c129076533308cbc7e03f8c55be.pngdate:2023-12-723:03:00tags:-踩坑构建用于复杂数据处理的高效UDP服务器和客户端引言在当今快速发展的网络通信世界......
  • 实验四 Web服务器1
    Web服务器1-socket编程实验内容基于华为鲲鹏云服务器CentOS中(或Ubuntu),使用LinuxSocket实现:time服务器的客户端服务器,提交程序运行截图echo服务器的客户端服务器,提交程序运行截图,服务器把客户端传进来的内容加入“服务器进程pid你的学号姓名echo:”返回给客户端服务器......
  • LUNIX安装FTP服务器的详细教程
    1.打开终端,进入root模式。在终端中输入:sudosu,回车后提示输入密码,输入密码即可。2.安装vsftpd软件。首先需要联网,或者通过新立德软件安装。如果需要卸载软件,可以使用命令sudoapt-getremovevsftpd。安装命令为sudoapt-getinstallvsftpd。3.安装完成后,默认会在文件系统下的/......
  • Web网页端IM产品RainbowChat-Web的v6.0版已发布
    一、关于RainbowChat-WebRainbowChat-Web是一套Web网页端IM系统,是RainbowChat的姊妹系统(RainbowChat是一套基于开源IM聊天框架 MobileIMSDK (Github地址) 的产品级移动端IM系统)。► 详细介绍:http://www.52im.net/thread-2483-1-1.html► 版本记录:http://www.52im.net/th......
  • beego框架 golang web项目-个人博客系统
    beego框架golangweb项目-个人博客系统beego个人博客系统功能介绍首页分页展示博客博客详情评论文章专栏分类导航资源分享时光轴点点滴滴关于本站后台管理登录系统设置分类添加修改删除管理博文添加修改删除管理基于Go语言和beego框架前端使用layui布局开发的......
  • Game = Rust + WebAssembly + 浏览器
    ❝努力成为一个情绪价值的提供者❞大家好,我是「柒八九」。一个「专注于前端开发技术/Rust及AI应用知识分享」的Coder。前言在上一篇Rust编译为WebAssembly在前端项目中使用我们通过一个简单的HelloWorld的Demo,讲述了如何将Rust编译为WebAssembly,并在前端项目中使用。虽然,......
  • 墨者学院—Webmin未经身份验证的远程代码执行漏洞
    一、概述Webmin是目前功能最强大的基于Web的Unix系统管理工具。管理员通过浏览器访问Webmin的各种管理功能并完成相应的管理动作。据统计,互联网上大约有13w台机器使用Webmin。当用户开启Webmin密码重置功能后,攻击者可以通过发送POST请求在目标系统中执行任意命令,且无需身份验......
  • C++socket服务器与客户端简单通信流程
    服务器和客户端简单通信的流程,做一个简单的复习:1.服务器创建的流程代码如下,各个重要函数已经写注释:#include<iostream>//推荐加上宏定义#defineWIN32_LEAN_AND_MEAN#include<winsock2.h>#include<Windows.h>#pragmacomment(lib,"ws2_32")usingnamespacestd;i......
  • 使用jsfpd截图并上传到文件服务器
    需求将网页上的html表单,截图并生成pdf,通过blob上传到文件服务器//获取表单元素domconstel=document.getElementById('open-reply_form');constheight=el.clientHeight;//截图,获取img图像html2canvas(el).then((canvas)=>{l......