网络编程第三天

devtools/2024/10/15 19:10:59/

服务器:

#include<sys/types.h> // 支持套接字地址结构
#include <sys/socket.h> // 提供套接字API
#include <netinet/in.h> // 定义IP地址结构体
#include <string.h> // 提供字符串操作函数
#include <stdio.h> // 提供标准I/O操作函数
#include <arpa/inet.h> // 提供IP地址转换函数
#include <stdlib.h>
#include "string.h"
#include "pthread.h"// udo组播代码
int main(int argc, char *argv[])
{int sockfd = socket(AF_INET, SOCK_DGRAM, 0); // 创建UDP套接字if (sockfd < 0){perror("socket");return -1;}struct ip_mreq mreq; // 定义IP多播结构体mreq.imr_multiaddr.s_addr = inet_addr("224.10.10.10"); // 设置多播组IP地址.mreq.imr_interface.s_addr = INADDR_ANY; // 设置本地接口为任何接口// 加入多播组if (setsockopt(sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq)) < 0){perror("setsockopt");return -1;}struct sockaddr_in server_addr; // 定义服务器地址结构体memset(&server_addr, 0, sizeof(server_addr)); // 初始化服务器地址结构体server_addr.sin_family = AF_INET; // 设置地址族为IPv4server_addr.sin_addr.s_addr = htonl(INADDR_ANY); // 设置服务器IP地址为任何地址server_addr.sin_port = htons(atoi(argv[1])); // 设置服务器端口号为8000// 绑定套接字到服务器地址if (bind(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0){perror("bind");return -1;}char buffer[1024]; // 定义缓冲区struct sockaddr_in client_addr; // 定义客户端地址结构体socklen_t client_addr_len = sizeof(client_addr); // 定义客户端地址长度while (1){memset(buffer, 0, sizeof(buffer)); // 清空缓冲区int len = recvfrom(sockfd, buffer, sizeof(buffer), 0, (struct sockaddr *)&client_addr, &client_addr_len); // 接收数据if(strncmp(buffer,"start",5)==0){char buf[1024];snprintf(buf,1024,"%s:%d 上线了",inet_ntoa(client_addr.sin_addr),ntohs(client_addr.sin_port));sendto(sockfd,buf,strlen(buf),0,(struct sockaddr *)&server_addr,client_addr_len);continue;}else if(strncmp(buffer,"end",3)==0){char buf[1024];snprintf(buf,1024,"%s:%d 下线了",inet_ntoa(client_addr.sin_addr),ntohs(client_addr.sin_port));sendto(sockfd,buf,strlen(buf),0,(struct sockaddr *)&server_addr,client_addr_len);continue;}if (len < 0){perror("recvfrom");continue;}buffer[len] = '\0';printf("Received message: %s\n", buffer); // 打印接收到的消息}return 0;
}

客户端:

#include<sys/types.h> // 支持套接字地址结构
#include <sys/socket.h> // 提供套接字API
#include <netinet/in.h> // 定义IP地址结构体
#include <string.h> // 提供字符串操作函数
#include <stdio.h> // 提供标准I/O操作函数
#include <arpa/inet.h> // 提供IP地址转换函数
#include <stdlib.h>
#include "string.h"
#include "pthread.h"
#include "signal.h"int sockfd;
struct sockaddr_in mcast_addr; // 定义组播地址结构体void func(void)
{sendto(sockfd, "end", strlen("end"), 0, (struct sockaddr *)&mcast_addr, sizeof(mcast_addr));exit(0);
}// UDP组播
int main(int argc, char *argv[])
{sockfd = socket(AF_INET, SOCK_DGRAM, 0); // 创建UDP套接字if (sockfd < 0){perror("socket");return -1;}mcast_addr.sin_family = AF_INET; // 设置地址族为IPv4mcast_addr.sin_addr.s_addr = inet_addr("224.10.10.10"); // 设置组播组IP地址mcast_addr.sin_port = htons(atoi(argv[1])); // 设置组播组端口号sendto(sockfd, "start", strlen("start"), 0, (struct sockaddr *)&mcast_addr, sizeof(mcast_addr));signal(SIGINT, (void *)func);// 循环发送数据while (1){char buffer[1024];printf("Enter message to send: ");fgets(buffer, sizeof(buffer), stdin);buffer[strlen(buffer) - 1] = '\0'; // 去掉fgets获取的回车int len = sendto(sockfd, buffer, strlen(buffer), 0, (struct sockaddr *)&mcast_addr, sizeof(mcast_addr));if (len < 0){perror("sendto");continue;}}return 0;
}


http://www.ppmy.cn/devtools/97899.html

相关文章

数字化转型对金融服务业的影响

数字化转型正在塑造每个行业&#xff0c;从快速消费品到金融&#xff0c;每个行业都受到新兴技术的影响。 那么&#xff0c;数字化转型在金融服务中扮演什么角色&#xff1f;这对招聘前景有何影响&#xff1f; 我们探讨了数字化转型对该行业的影响、其对招聘策略的影响、数据…

别人入门request一天,而你只需要一篇文章就可以入门

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、安装 requests二、使用requests1.发送 GET 请求1.发送带有请求参数的GET请求2.GET请求设置请求头 2.发送 POST 请求1.发送带有请求data参数的POST请求2.发送…

MyBatis源码系列2(简易版MyBatis)

通过上一篇分析可知&#xff0c;可以访问数据库繁琐步骤封装为两部分完成。 步骤1、使用数据库连接池完成数据库的连接&#xff1b; 步骤2、封装一个“方法”&#xff0c;入参为脚本&#xff0c;出参为“目标”数据。 通过步骤2可以看出&#xff0c;脚本是与“目标数据”绑定在…

【NI国产替代】NI-9218 全国产替代,2通道C系列通用模拟输入模块

51.2 kS/s/ch&#xff0c;2通道C系列通用模拟输入模块 NI‑9218专为多用途测量而设计。 它使用针对特定测量的适配器提供了对加速度计、供电传感器、全桥和电压测量以及四分之一桥、半桥、60V和电流测量的内置支持。 每个通道可单独选择&#xff0c;因而用户可在各个通道上进行…

悟空降世 撼动全球

文&#xff5c;琥珀食酒社 作者 | 积溪 一只猴子能值多少钱&#xff1f; 答案是&#xff1a;13个小目标 这两天 只要你家没有断网 一定会被这只猴子刷屏 它就是咱国产的3A游戏 《黑神话&#xff1a;悟空》 这只猴子到底有多火&#xff1f; 这么跟你说吧 茅台见了它都…

政策驱动,科技引领,漫途信息化监测方案守护农村饮水安全!

近日&#xff0c;山西省人民政府正式发布《山西省农村供水高质量发展规划》&#xff0c;明确到2030年&#xff0c;全面实现农村24小时供水&#xff0c;县域农村饮水安全标准化建设达标率力争达到80%&#xff0c;基本实现农村供水城市化、城乡供水均等化。 现阶段部分地区受…

在亚马逊云科技上部署开源大模型并利用RAG和LangChain开发生成式AI应用

项目简介&#xff1a; 小李哥将继续每天介绍一个基于亚马逊云科技AWS云计算平台的全球前沿AI技术解决方案&#xff0c;帮助大家快速了解国际上最热门的云计算平台亚马逊云科技AWS AI最佳实践&#xff0c;并应用到自己的日常工作里。 本次介绍的是如何在亚马逊云科技上利用Sag…

前端 获取时间范围内的所有周数组集合,第一项为首月的首个周一

具体可实现的效果例如&#xff1a; 数据格式&#xff1a; 具体代码实现&#xff1a; /*** 获取当前日期的第一个周一是哪天* params date - YYYY-MM*/function getMonthFirstWeekDay(date) {let year new Date(date).getFullYear();let month new Date(date).getMonth();for …