当前位置: 首页 > news >正文

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;clientaddr.sun_family = AF_UNIX;strcpy(serveraddr.sun_path,"./udpserver");strcpy(clientaddr.sun_path,"./udpclient");
  • 三、客户机绑定数据报式套接字(bind函数):
		if(-1 == bind(sock_fd,(struct sockaddr *)&clientaddr,clientaddr_len)){perror("bind error");exit(-1);}
  • 四、客户机端发收数据(sendto函数、recvfrom函数):
			memset(buf,0,sizeof(buf));fgets(buf,sizeof(buf),stdin);buf[strlen(buf) - 1] = '\0';int ret1 = sendto(sock_fd,buf,sizeof(buf),0,(struct sockaddr *)&serveraddr,serveraddr_len);if(-1 == ret1){perror("sendto error");exit(-1);}int ret2 = recvfrom(sock_fd,buf,sizeof(buf),0,(struct sockaddr*)&serveraddr,&serveraddr_len);if(-1 == ret2){perror("recvfrom error");exit(-1);}printf("服务器[%s]发来应答消息[%s]\n",serveraddr.sun_path,buf);
  • 五、关闭套接字(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;clientaddr.sun_family = AF_UNIX;strcpy(serveraddr.sun_path,"./udpserver");strcpy(clientaddr.sun_path,"./udpclient");//绑定套接字if(-1 == bind(sock_fd,(struct sockaddr *)&clientaddr,clientaddr_len)){perror("bind error");exit(-1);}printf("基于UDP的本地通信客户机启动!!!\n");char buf[128] = {0};//收发数据while(true){memset(buf,0,sizeof(buf));fgets(buf,sizeof(buf),stdin);buf[strlen(buf) - 1] = '\0';int ret1 = sendto(sock_fd,buf,sizeof(buf),0,(struct sockaddr *)&serveraddr,serveraddr_len);if(-1 == ret1){perror("sendto error");exit(-1);}int ret2 = recvfrom(sock_fd,buf,sizeof(buf),0,(struct sockaddr*)&serveraddr,&serveraddr_len);if(-1 == ret2){perror("recvfrom error");exit(-1);}printf("服务器[%s]发来应答消息[%s]\n",serveraddr.sun_path,buf);}//关闭套接字close(sock_fd);return 0;}
  • 运行结果:
	基于UDP的本地通信客户机启动!!!hello服务器[./udpserver]发来应答消息[hello---------k]I Love China!!!服务器[./udpserver]发来应答消息[I Love China!!!---------k]miss U服务器[./udpserver]发来应答消息[miss U---------k]
  • 特别注意:
  • strcpy(serveraddr.sun_path,"./udpserver");strcpy(clientaddr.sun_path,"./udpclient");代码段中的udpserver文件udpclient文件套接字文件
  • 如下所示:
	srwxrwxr-x 1 linux linux     0 1111 01:18 udpclientsrwxrwxr-x 1 linux linux     0 1111 01:18 udpserver
http://www.lryc.cn/news/226647.html

相关文章:

  • 【性能测试】服务端中间件docker常用命令解析整理(详细)
  • 【探索Linux】—— 强大的命令行工具 P.14(进程间通信 | 匿名管道 | |进程池 | pipe() 函数 | mkfifo() 函数)
  • 图论12-无向带权图及实现
  • 每日一题(LeetCode)----数组--有序数组的平方
  • SpringCloud微服务:Eureka
  • 19.删除链表的倒数第N个结点(LeetCode)
  • PyTorch技术和深度学习——三、深度学习快速入门
  • 360导航恶意修改浏览器启动页!我的chrome和IE均中招,如何解决?
  • RabbitMQ的高级特性
  • Java自学第10课:JavaBean和servlet基础
  • AR打卡小程序:构建智能办公的新可能
  • Python环境安装、Pycharm开发工具安装(IDE)
  • 报时机器人的rasa shell执行流程分析
  • C#开发的OpenRA游戏之世界存在的属性UpdatesPlayerStatistics(2)
  • Ocelot:.NET开源API网关提供路由管理、服务发现、鉴权限流等功能
  • wsl [Ubuntu20.04.6] 安装 Hadoop
  • 2023华为ict网络赛道初赛(部分)试题
  • rabbitMq虚拟主机概念
  • 2-CentOS7.9下安装docker
  • 【已验证-直接用】微信小程序wx.request请求服务器json数据并渲染到页面
  • 如何提高小红书笔记的互动率
  • RabbitMQ 系列教程
  • 无感刷新token
  • 【Python大数据笔记_day06_Hive】
  • Netty--文件编程
  • SVN 服务器建立
  • iPhone或在2024开放第三方应用商店。
  • 《C和指针》笔记36:动态内存分配
  • C/S架构学习之基于UDP的本地通信(服务器)
  • excel如何加密(excel加密的三种方法)