C/S架构学习之基于UDP的本地通信(服务器)

  • 基于UDP的本地通信(服务器):
  • 创建流程:
  • 一、创建数据报式套接字(socket函数):
		int sock_fd = socket(AF_UNIX,SOCK_DGRAM,0);if(-1 == sock_fd){perror("socket error");exit(-1);}
  • 二、创建服务器和客户机的本地网络信息结构体并填充服务器本地网络信息结构体 (struct sockaddr_un):
  • 本地网络信息结构体:
	#include <sys/un.h>struct sockaddr_un {sa_family_t sun_family;               //AF_UNIXchar        sun_path[108];            //pathname};
		struct sockaddr_un serveraddr,clientaddr;socklen_t serveraddr_len = sizeof(serveraddr);socklen_t clientaddr_len = sizeof(clientaddr);memset(&serveraddr,0,serveraddr_len);memset(&clientaddr,0,clientaddr_len);serveraddr.sun_family = AF_UNIX;strcpy(serveraddr.sun_path,"./udpserver");
  • 三、绑定数据报式套接字(bind函数):
		if(-1 == bind(sock_fd,(struct sockaddr *)&serveraddr,serveraddr_len)){perror("bind error");exit(-1);}
  • 四、服务器端收发数据(recvfrom函数、sendto函数):
            memset(buf,0,sizeof(buf));int ret1 = recvfrom(sock_fd,buf,sizeof(buf),0,(struct sockaddr*)&clientaddr,&clientaddr_len);if(-1 == ret1){perror("recvfrom error");exit(-1);}printf("客户端[%s]发来消息[%s]\n",clientaddr.sun_path,buf);//发送应答消息strcat(buf,"---------k");int ret2 = sendto(sock_fd,buf,sizeof(buf),0,(struct sockaddr *)&clientaddr,clientaddr_len);if(-1 == ret2){perror("sendto error");exit(-1);}
  • 五、关闭套接字(close函数):
	close(sock_fd);
  • 示例代码:
	#include <stdio.h>#include <string.h>#include <stdlib.h>#include <sys/socket.h>#include <sys/types.h>#include <unistd.h>#include <stdbool.h>#include <sys/un.h>#include <arpa/inet.h>#include <netinet/ip.h>int main(int argc, char const *argv[]){//创建套接字int sock_fd = socket(AF_UNIX,SOCK_DGRAM,0);if(-1 == sock_fd){perror("socket error");exit(-1);}//填充网络信息结构体struct sockaddr_un serveraddr,clientaddr;socklen_t serveraddr_len = sizeof(serveraddr);socklen_t clientaddr_len = sizeof(clientaddr);memset(&serveraddr,0,serveraddr_len);memset(&clientaddr,0,clientaddr_len);serveraddr.sun_family = AF_UNIX;strcpy(serveraddr.sun_path,"./udpserver");//绑定套接字if(-1 == bind(sock_fd,(struct sockaddr *)&serveraddr,serveraddr_len)){perror("bind error");exit(-1);}printf("基于UDP的本地通信服务器启动!!!\n");char buf[128] = {0};//收发数据while(true){memset(buf,0,sizeof(buf));int ret1 = recvfrom(sock_fd,buf,sizeof(buf),0,(struct sockaddr*)&clientaddr,&clientaddr_len);if(-1 == ret1){perror("recvfrom error");exit(-1);}printf("客户端[%s]发来消息[%s]\n",clientaddr.sun_path,buf);//发送应答消息strcat(buf,"---------k");int ret2 = sendto(sock_fd,buf,sizeof(buf),0,(struct sockaddr *)&clientaddr,clientaddr_len);if(-1 == ret2){perror("sendto error");exit(-1);}}//关闭套接字close(sock_fd);return 0;}
  • 运行结果:
	基于UDP的本地通信服务器启动!!!客户端[./udpclient]发来消息[hello]客户端[./udpclient]发来消息[I Love China!!!]客户端[./udpclient]发来消息[miss U]
  • 特别注意:
  • strcpy(serveraddr.sun_path,"./udpserver");udpserver文件套接字文件
  • 如下所示:
	srwxrwxr-x 1 linux linux     0 1111 01:18 udpserver

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/139023.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

138.随机链表的复制(LeetCode)

深拷贝&#xff0c;是指将该链表除了正常单链表的数值和next指针拷贝&#xff0c;再将random指针进行拷贝 想法一 先拷贝出一份链表&#xff0c;再对于每个节点的random指针&#xff0c;在原链表进行遍历&#xff0c;找到random指针的指向&#xff0c;最后完成拷贝链表random…

Docker 和 Kubernetes ,技术相同之处,和不同之处

目录 Docker 技术相同之处&#xff1a; 不同之处&#xff1a; Kubernetes 技术相同之处&#xff1a; 不同之处&#xff1a; Docker 技术相同之处&#xff1a; 容器化&#xff1a; Docker 和 Kubernetes 都是容器技术的代表。Docker 利用容器技术将应用程序及其所有依赖项…

CSS3 分页、框大小、弹性盒子

一、CSS3分页&#xff1a; 网站有很多个页面&#xff0c;需要使用分页来为每个页面做导航。示例&#xff1a; <style> ul.pagination { display: inline-block; padding: 0; margin: 0; } ul.pagination li {display: inline;} ul.pagination li a { color: black; f…

SW如何显示样条曲线的控标

刚刚学习隔壁老王的sw画图时&#xff0c;怎么点都点不出样条曲线的控标&#xff0c;于是果断查询了一下解决方法&#xff0c;其实很简单&#xff0c;只不过是培训机构故意不说&#xff0c;叫你还解决不了&#xff0c;难受了就会花钱买他们的课了。毕竟如果学会了怎么解决问题了…

数据结构之双向链表

目录 引言 链表的分类 双向链表的结构 双向链表的实现 定义 创建新节点 初始化 打印 尾插 头插 判断链表是否为空 尾删 头删 查找与修改 指定插入 指定删除 销毁 顺序表和双向链表的优缺点分析 源代码 dlist.h dlist.c test.c 引言 数据结构…

C语言算术运算符

常用算术运算符 正 - 负 加 - 减 * 乘 / 除 % 取余 --&#xff08;后面讲&#xff09; 运算符术语示例表示结果正号33-负号-3-3加10 515-减10 - 55*乘10 * 550/除10 / 52%取余&#xff08;取模&#xff09;10 % 31 算术运算符注意事项 注意事项1&#xff1a; 除法运算时&…

AUTOSAR汽车电子嵌入式编程精讲300篇-智能阀CAN总线延时边界确定(续)

目录 3.2 单路智能阀系统延时边界确定 3.3 单路智能阀系统CAN通信延时边界仿真分析

Qt TCP/IP网络通信

TCP服务器部分&#xff1a; 创建TCP服务器&#xff1a; #include <QTcpServer> QTcpServer *tcpServer; //TCP服务器 tcpServernew QTcpServer(this);TCP服务器来连接的信号与槽&#xff1a; connect(tcpServer,SIGNAL(newConnection()),this,SLOT(onNewConnection()…

devops完整搭建教程(gitlab、jenkins、harbor、docker)

devops完整搭建教程&#xff08;gitlab、jenkins、harbor、docker&#xff09; 文章目录 devops完整搭建教程&#xff08;gitlab、jenkins、harbor、docker&#xff09;1.简介&#xff1a;2.工作流程&#xff1a;3.优缺点4.环境说明5.部署前准备工作5.1.所有主机永久关闭防火墙…

360导航恶意修改浏览器启动页!我的chrome和IE均中招,如何解决?

0&#xff0c;关闭360等“安全”软件 1&#xff0c;按下组合键winR 2&#xff0c;输入regedit&#xff0c;回车 3&#xff0c;按下组合键ctrlF 4&#xff0c;输入http://hao.360.cn&#xff0c;查找下一个 5&#xff0c;查到一个注册表键值就删一个&#xff0c;一个不放过…

学习c#的第五天

目录 C# 运算符 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 其他运算符 C# 中的运算符优先级 C# 运算符 算术运算符 下表显示了 C# 支持的所有算术运算符。假设变量 A 的值为 10&#xff0c;变量 B 的值为 20&#xff0c;则&#xff1a; 运算符描述实例…

CentOs7 NAT模式连接网络

1.配置动态网络 1.1 检查主机网卡配置 检查主机的网络设置 进入控制面板&#xff0c;找到网络共享中心 查看适配器是否都已经开启 1.2 设置虚拟机的网络配置 打开虚拟机网络配置设置&#xff0c;对网卡VMnet8 进行设置 记住网关 全部选择应用&#xff0c;确定 1.3 设置…

C# List<T>.IndexOf()方法的使用

C#中的List<T>.IndexOf()方法用于查找指定元素在列表中的索引位置。它返回第一个匹配项的索引&#xff0c;如果未找到匹配项&#xff0c;则返回-1。 语法&#xff1a;有三种参数可选 int List<T>.IndexOf(T item); int List<T>.IndexOf(T item, int star…

df.groupby

df.groupby根据分类变量进行分组&#xff0c;随后分别对各组的连续变量进行统计描述。 import pandas as pddf pd.DataFrame({id: [1, 2, 3, 4, 5],sex: [M, F, M, F, M],age: [25, 30, 28, 35, 40],HUA: [0, 0, 0, 1, 1],Scr: [1.2, 1.0, 1.5, 1.3, 1.8],UA: [5.0, 4.5, 6.0,…

Vue3 使用Element Plus表格单选带checkbox

官方地址&#xff1a;添加链接描述 官方给出的多选带checkbox&#xff0c;单选直接选中当前行高亮&#xff0c;有时候不想要单行高亮&#xff0c;想要带checkbox的单选&#xff0c;需要对多选进行改造 官方给的多选例子&#xff1a; <template><el-tableref"mult…

DevOps平台两种实现模式

我们需要一个DevOps平台 要讨论DevOps平台的实现模式&#xff0c;似乎就必须讨论它们的概念定义。然而&#xff0c;当大家要讨论它们的定义时&#xff0c;就像在讨论薛定谔的猫。 A公司认为它不过是自动化执行Shell脚本的平台&#xff0c;有些人认为它是一场运动&#xff0c;另…

利用 Google Artifact Repository 构建docker 镜像仓库

参考了google 官方文档 https://cloud.google.com/artifact-registry/docs/docker/store-docker-container-images 首先 enable GAR api gcloud services enable artifactregistry.googleapis.com gcloud services list | grep -i artifact artifactregistry.googleapis.com …

SparkAi创作系统ChatGPT网站源码+详细搭建部署教程+AI绘画系统+支持GPT4.0+Midjourney绘画

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…

考研分享第1期 | 末9生物跨专业考研北京大学电子信息404分经验分享

全文概览 一、个人信息 二、关于考研的经验分享 三、最后的小Tips 一、个人信息 姓名&#xff1a;Jackson 本科院校&#xff1a;某末流985生物专业 报考院校&#xff1a;北京大学电子信息专业 择校意向&#xff1a;北航计算机、人大高瓴、复旦软院、清华大学深研院、北…