首页 > 编程语言 >实验四 Web服务器1-socket编程

实验四 Web服务器1-socket编程

时间:2023-12-07 15:25:47浏览次数:35  
标签:Web socket int 编程 address include sin addr

实验四 Web服务器1-socket编程

基于华为鲲鹏云服务器CentOS中(或Ubuntu),使用Linux Socket实现:
1. time服务器的客户端服务器,提交程序运行截图
2. echo服务器的客户端服务器,提交程序运行截图,服务器把客户端传进来的内容加入“服务器进程pid  你的学号 姓名 echo :”返回给客户端
3. 服务器部署到华为云服务器,客户端用Ubuntu虚拟机。
4. 要用多线程或者多进程实现,至少连接两个客户端。
5. 把服务器部署到试验箱。(加分项)

 time_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 <time.h>
 7 
 8 #define PORT 12345
 9 
10 int main() {
11     int server_fd, new_socket;
12     struct sockaddr_in address;
13     int opt = 1;
14     int addrlen = sizeof(address);
15     
16     // Create socket file descriptor
17     if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
18         perror("socket failed");
19         exit(EXIT_FAILURE);
20     }
21     
22     // Forcefully attaching socket to the port 12345
23     if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt))) {
24         perror("setsockopt");
25         exit(EXIT_FAILURE);
26     }
27     address.sin_family = AF_INET;
28     address.sin_addr.s_addr = INADDR_ANY;
29     address.sin_port = htons(PORT);
30     
31     // Forcefully attaching socket to the port 12345
32     if (bind(server_fd, (struct sockaddr *)&address, sizeof(address))<0) {
33         perror("bind failed");
34         exit(EXIT_FAILURE);
35     }
36     if (listen(server_fd, 3) < 0) {
37         perror("listen");
38         exit(EXIT_FAILURE);
39     }
40     while (1) {
41         if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen))<0) {
42             perror("accept");
43             exit(EXIT_FAILURE);
44         }
45         char buffer[1024] = {0};
46         time_t current_time;
47         time(&current_time);
48         snprintf(buffer, sizeof(buffer), "%s", ctime(&current_time));
49         send(new_socket, buffer, strlen(buffer), 0);
50         printf("Time sent to the client\n");
51         close(new_socket);
52     }
53     return 0;
54 }

time_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 
 7 #define PORT 12345
 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(PORT);
19 
20     // Convert IPv4 and IPv6 addresses from text to binary form
21     if(inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr)<=0) {
22         printf("\nInvalid address/ Address not supported \n");
23         return -1;
24     }
25     if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {
26         printf("\nConnection Failed \n");
27         return -1;
28     }
29     valread = read(sock, buffer, 1024);
30     printf("%s\n", buffer);
31     return 0;
32 }

运行截图

 

 echo_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 #include <sys/types.h>
 8 
 9 #define PORT 12345
10 
11 void handle_client(int new_socket) {
12     char buffer[1024] = {0};
13     int valread = read(new_socket, buffer, 1024);
14     printf("Received message from client: %s\n", buffer);
15     
16     // 构造回复消息
17     pid_t pid = getpid();
18     char student_id[] = "20211102";
19     char student_name[] = "尹子扬";
20     char reply_message[1024];
21     sprintf(reply_message, "服务器进程pid %d %s %s echo: %s", pid, student_id, student_name, buffer);
22     
23     // 发送回复消息给客户端
24     send(new_socket, reply_message, strlen(reply_message), 0);
25     printf("Reply sent to the client\n");
26     close(new_socket);
27 }
28 
29 int main() {
30     int server_fd, new_socket;
31     struct sockaddr_in address;
32     int opt = 1;
33     int addrlen = sizeof(address);
34     
35     // 创建socket文件描述符
36     if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
37         perror("socket failed");
38         exit(EXIT_FAILURE);
39     }
40     
41     // 设置socket选项,允许地址重用
42     if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt))) {
43         perror("setsockopt");
44         exit(EXIT_FAILURE);
45     }
46     address.sin_family = AF_INET;
47     address.sin_addr.s_addr = INADDR_ANY;
48     address.sin_port = htons(PORT);
49     
50     // 将socket绑定到指定的IP地址和端口号
51     if (bind(server_fd, (struct sockaddr *)&address, sizeof(address))<0) {
52         perror("bind failed");
53         exit(EXIT_FAILURE);
54     }
55     if (listen(server_fd, 3) < 0) {
56         perror("listen");
57         exit(EXIT_FAILURE);
58     }
59   
60     while (1) {
61         if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen))<0) {
62             perror("accept");
63             exit(EXIT_FAILURE);
64         }
65         handle_client(new_socket);
66     }
67     return 0;
68 }

 echo_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 
 8 #define PORT 12345
 9 
10 int main() {
11     struct sockaddr_in serv_addr;
12     int sock = 0, valread;
13     char buffer[1024] = {0};
14     if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
15         printf("\n Socket creation error \n");
16         return -1;
17     }
18     serv_addr.sin_family = AF_INET;
19     serv_addr.sin_port = htons(PORT);
20 
21     // 将IPv4地址从文本转换为二进制形式
22     if(inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr)<=0) {
23         printf("\nInvalid address/ Address not supported \n");
24         return -1;
25     }
26     if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {
27         printf("\nConnection Failed \n");
28         return -1;
29     }
30     
31     // 发送消息给服务器
32     char message[] = "Hello, server!";
33     send(sock, message, strlen(message), 0);
34     
35     // 从服务器接收回复
36     valread = read(sock, buffer, 1024);
37     printf("Reply from server: %s\n", buffer);
38     
39     return 0;
40 }

运行截图

第一个客户端:

 第二个客户端:

 

标签:Web,socket,int,编程,address,include,sin,addr
From: https://www.cnblogs.com/20211115fyq/p/17882081.html

相关文章

  • 构建一个语音转文字的WebApi服务
    构建一个语音转文字的WebApi服务简介由于业务需要,我们需要提供一个语音输入功能,以便更方便用户的使用,所以我们需要提供语音转文本的功能,下面我们将讲解使用Whisper将语音转换文本,并且封装成WebApi提供web服务给前端调用。创建项目第一步打开Vscode,选择一个目录作为工作空间,然......
  • 实验四 Web服务器1-socket编程
    time服务器time客户端echo服务器echo客户端......
  • 实验四 Web服务器2
    基于华为鲲鹏云服务器CentOS中(或Ubuntu),使用LinuxSocket实现:1.Web服务器的客户端服务器,提交程序运行截图2.实现GET即可,请求,响应要符合HTTP协议规范3.服务器部署到华为云服务器,浏览器用本机的4.把服务器部署到试验箱。(加分项)Web服务器代码(wbs.c)#include<stdio.h>#incl......
  • 响应式编程又变天了?看JDK21虚拟线程如何颠覆!
    本文解释为啥会有响应式编程,为什么它在开发者中不太受欢迎,以及引入Java虚拟线程后它可能最终会消失。命令式风格编程一直深受开发者喜爱,如if-then-else、while循环、函数和代码块等结构使代码易理解、调试,异常易追踪。然而,像所有好的东西一样,通常也有问题。这种编程风格导致......
  • 实验四 Web服务器1-socket编程
    基于华为鲲鹏云服务器CentOS中(或Ubuntu),使用LinuxSocket实现:1.time服务器的客户端服务器,提交程序运行截图3.服务器部署到华为云服务器,客户端用Ubuntu虚拟机。time服务器代码(tms.c)#include<stdio.h>#include<stdlib.h>#include<string.h>#include<unistd.h>#include......
  • 实验四 Web服务器2
    基于华为鲲鹏云服务器CentOS中(或Ubuntu),使用LinuxSocket实现:Web服务器的客户端服务器,提交程序运行截图实现GET即可,请求,响应要符合HTTP协议规范服务器部署到华为云服务器,浏览器用本机的把服务器部署到试验箱。(加分项)web服务器与客户端web_server.c#include<stdio.h>#inc......
  • 实验四 Web服务器1-socket编程
    基于华为鲲鹏云服务器CentOS中(或Ubuntu),使用LinuxSocket实现:1.time服务器的客户端服务器,提交程序运行截图2.echo服务器的客户端服务器,提交程序运行截图,服务器把客户端传进来的内容加入“服务器进程pid你的学号姓名echo:”返回给客户端3.服务器部署到华为云服务器,客户端......
  • 配置webDriver(火狐浏览器)
    1.查看浏览器版本号在下载火狐浏览器的驱动之前,先确认自己火狐浏览器的版本号。火狐浏览器:设置 >常规>(下拉)Firefox更新,可以看到版本号。我的浏览器版本:120.0.1(64位)     如果想下载其他火狐浏览器的版本,可以到下面这个链接:https://ftp.mo......
  • 可视化学习:WebGL的基础使用
    引言继续复习可视化的学习。WebGL和其他Web端的图形系统存在很大的不同,是OpenGLES规范在浏览器的实现,它最大的不同就在于它更接近底层,可以由开发者直接操作GPU来实现绘图,性能很好,可以充分利用GPU并行计算的能力,并且WebGL还支持3D物体的渲染;WebGL最大的缺点应该就在于它的使用比......
  • ARM架构与编程--基于STM32F103 (1)LED原理图
    ARM架构与编程--基于STM32F103--(1)LED原理图--前言学习笔记《硬件知识_LED原理图》一、点亮一个led的步骤当我们学习C语言的时候,我们会写个Hello程序。那当我们写ARM程序,也该有一个简单的程序引领我们入门,这个程序就是点亮LED。我们怎样去点亮一个LED呢?分为三步:1.看原理图,确......