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

实验四 Web服务器2

时间:2023-12-07 14:11:43浏览次数:34  
标签:Web addr int 实验 address 服务器 include socket

基于华为鲲鹏云服务器CentOS中(或Ubuntu),使用Linux Socket实现:

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

web服务器与客户端

web_server.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>

void handle_client(int client_socket) {
    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";
    send(client_socket, response, strlen(response), 0);
    close(client_socket);
}

int main() {
    int server_fd, new_socket;
    struct sockaddr_in address;
    int opt = 1;
    int addrlen = sizeof(address);
    
    if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
        perror("socket failed");
        exit(EXIT_FAILURE);
    }
    
    if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt))) {
        perror("setsockopt");
        exit(EXIT_FAILURE);
    }
    
    address.sin_family = AF_INET;
    address.sin_addr.s_addr = INADDR_ANY;
    address.sin_port = htons(8080);
    
    if (bind(server_fd, (struct sockaddr *)&address, sizeof(address))<0) {
        perror("bind failed");
        exit(EXIT_FAILURE);
    }
    
    if (listen(server_fd, 3) < 0) {
        perror("listen");
        exit(EXIT_FAILURE);
    }
  
    while (1) {
        if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen))<0) {
            perror("accept");
            exit(EXIT_FAILURE);
        }
        handle_client(new_socket);
    }
    return 0;
}

web_client.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#include <arpa/inet.h>

int main() {
    struct sockaddr_in serv_addr;
    int sock = 0, valread;
    char buffer[1024] = {0};
    if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
        printf("\n Socket creation error \n");
        return -1;
    }
    serv_addr.sin_family = AF_INET;
    serv_addr.sin_port = htons(8080);
    if(inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr)<=0) {
        printf("\nInvalid address/ Address not supported \n");
        return -1;
    }
    if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {
        printf("\nConnection Failed \n");
        return -1;
    }
    char message[] = "GET / HTTP/1.1\r\nHost: localhost\r\nConnection: close\r\n\r\n";
    send(sock, message, strlen(message), 0);
    
    while ((valread = read(sock, buffer, 1023)) > 0) {
        buffer[valread] = '\0';
        printf("%s", buffer);
    }
    
    return 0;
}

运行截图:

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

相关文章

  • 实验四 Web服务器1-socket编程
    基于华为鲲鹏云服务器CentOS中(或Ubuntu),使用LinuxSocket实现:1.time服务器的客户端服务器,提交程序运行截图2.echo服务器的客户端服务器,提交程序运行截图,服务器把客户端传进来的内容加入“服务器进程pid你的学号姓名echo:”返回给客户端3.服务器部署到华为云服务器,客户端......
  • IntelliJ IDEA无公网远程Linux服务器环境开发(建议收藏!)
    IDEA的远程开发功能,可以将本地的编译、构建、调试、运行等工作都放在远程服务器上执行,而本地仅运行客户端软件进行常规的开发操作即可,旧版本IDEA目前不支持该功能.,本例使用的是IDEA2023.2.5版本下面介绍如何在IDEA中设置远程连接服务器开发环境并结合Cpolar内网穿透工具实现无......
  • spring 内嵌服务器相关
    Tomcat是一个Web服务器和Servlet容器,Servlet是一种用于处理HTTP请求的Java类,而Spring是一个框架,它提供了一系列模块和功能,包括Web模块,用于集成Tomcat和Servlet,以构建企业级应用程序。任何SpringWeb的entrypoint,都是servlet。自定义嵌入式容器参考:https://do......
  • 配置webDriver(火狐浏览器)
    1.查看浏览器版本号在下载火狐浏览器的驱动之前,先确认自己火狐浏览器的版本号。火狐浏览器:设置 >常规>(下拉)Firefox更新,可以看到版本号。我的浏览器版本:120.0.1(64位)     如果想下载其他火狐浏览器的版本,可以到下面这个链接:https://ftp.mo......
  • CentOS系统下配置HTTP服务器的步骤
    在CentOS系统下配置HTTP服务器涉及到一系列的步骤。以下是一个基本的步骤概述,帮助你了解如何为CentOS系统配置HTTP服务器。1. 安装HTTP服务器软件:首先,你需要在CentOS系统上安装HTTP服务器软件。常见的选择是ApacheHTTP服务器。你可以使用以下命令来安装Apache:sql复制代码sudoyum......
  • CentOS系统中设置反向代理服务器的步骤
    在CentOS系统中设置反向代理服务器可以帮助你隐藏原始服务器的细节,并提高服务器的安全性。以下是在CentOS系统中设置反向代理服务器的步骤概述:1. 安装反向代理软件:常见的反向代理软件包括Nginx和Apache。你可以选择其中之一来作为你的反向代理服务器。使用以下命令来安装Nginx或Ap......
  • 可视化学习:WebGL的基础使用
    引言继续复习可视化的学习。WebGL和其他Web端的图形系统存在很大的不同,是OpenGLES规范在浏览器的实现,它最大的不同就在于它更接近底层,可以由开发者直接操作GPU来实现绘图,性能很好,可以充分利用GPU并行计算的能力,并且WebGL还支持3D物体的渲染;WebGL最大的缺点应该就在于它的使用比......
  • vue webpack 配置babel es6转化转化es5
    1、安装相关依赖npmi-D@babel/[email protected]@babel/[email protected]@8.0.6//语法中有asyncawait等npmi-D@babel/[email protected]@babel/[email protected]、babel.config.jsmodule.exports={pres......
  • wamp修改站点路径,php服务器修改路径
    一、修改apache目录下载好WampServer后,它默认网站根目录是:“D:/wamp/www”(示例若不同点击右下角的wampserver有个www目录即默认网站根目录)打个比方,我现在要把网站根目录改为“E:/study”1.打开 D:\wamp\bin\apache\apache2.4.23\conf(本机示例)中的httd.conf......
  • Web_XCTF/BUUCTF_WriteUp | warmup
    题目分析F12查看源码,发现注释<!--source.php-->,作为参数接入url提交,得到php代码:稍做分析:<?phphighlight_file(__FILE__);//对当前文件进行PHP语法高亮显示classemmm//构造类emmm{publicstaticfunctioncheckF......