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

网络编程9.3

使用UDP实现多个客户端与服务器的通信,并在使用connect函数后只有一个客户端能与服务器通信

服务器:

#include <myhead.h>
#define SERPORT 9999
#define SERIP "192.168.0.126"
int main(int argc, const char *argv[])
{//1、创建旧的套接字int oldfd = socket(AF_INET,SOCK_DGRAM,0);if(oldfd==-1){perror("socket");return -1;}//2、绑定struct sockaddr_in sin = {.sin_family = AF_INET,.sin_port = htons(SERPORT),.sin_addr.s_addr = inet_addr(SERIP)};if(bind(oldfd,(struct sockaddr *)&sin,sizeof(sin))==-1){perror("bind");return -1;}//3、收发信息struct sockaddr_in cin;socklen_t cinlen = sizeof(cin);char buf[100];while(1){memset(buf,0,sizeof(buf));int len = recvfrom(oldfd,buf,sizeof(buf),0,(struct sockaddr *)&cin,&cinlen);printf("%s:%d:发来消息\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port));printf("服务器接收的消息:%s\n",buf);if(strcmp(buf,"aaa")==0){connect(oldfd,(struct sockaddr *)&cin,sizeof(cin));printf("现在只能与一个客户端通话\n");}if(len==0){printf("客户端跑了\n");break;}}close(oldfd);return 0;
}

客户端:

#include <myhead.h>
#define CLIPORT 9999
#define CLIIP "192.168.0.126"
int main(int argc, const char *argv[])
{//1、创建套接字int oldfd = socket(AF_INET,SOCK_DGRAM,0);if(oldfd==-1){perror("socket");return -1;}struct sockaddr_in cin = {.sin_family = AF_INET,.sin_port = htons(CLIPORT),.sin_addr.s_addr = inet_addr(CLIIP)};//2、收发消息char buf[1024] = "";while(1){printf("客户端发消息\n");fgets(buf,sizeof(buf),stdin);buf[strlen(buf)-1] = '\0';sendto(oldfd,buf,sizeof(buf),0,(struct sockaddr *)&cin,sizeof(cin));printf("发送成功\n");if(strcmp(buf,"quit")==0){break;}}close(oldfd);return 0;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 基础学习之——Kubernetes
  • vscode好用的快捷键整理~
  • 基础学习之——Docker Compose的安装和使用
  • 不管夫妻还是情人,想要长相厮守、生活幸福美满,就这两个字!
  • 宁波银行资产规模首超3万亿,高成长性被机构清一色看好
  • 维度不固定的多维数组形参笔记
  • Swift 运算符
  • spring boot 项目 prometheus 自定义指标收集区分应用环境集群实例ip,使用 grafana 查询--方法耗时分位数指标
  • HarmonyOS 开发范式、应用模型
  • Electron 项目实战 02:打包和自动更新
  • 有temp表包含A,B两列,使用SQL,对B列进行处理,形成C列,按A列顺序,B列值不变,则C列累计技术,B列值变化,则C列重新开始计数
  • 数据库课程设计mysql---图书管理系统详细的设计文档和需求文档
  • TCP如何关闭连接(详细版)
  • 如何进行 AWS 云监控
  • Meta关闭Spark AR平台:未来规划与影响分析
  • 2017前端实习生面试总结
  • dva中组件的懒加载
  • eclipse的离线汉化
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • isset在php5.6-和php7.0+的一些差异
  • JS基础之数据类型、对象、原型、原型链、继承
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • Mac转Windows的拯救指南
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • Promise面试题2实现异步串行执行
  • spring + angular 实现导出excel
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • Vim 折腾记
  • Vue 重置组件到初始状态
  • 从0实现一个tiny react(三)生命周期
  • 订阅Forge Viewer所有的事件
  • 反思总结然后整装待发
  • 计算机常识 - 收藏集 - 掘金
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 理清楚Vue的结构
  • 前端_面试
  • 入手阿里云新服务器的部署NODE
  • 最简单的无缝轮播
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • #每天一道面试题# 什么是MySQL的回表查询
  • #数据结构 笔记一
  • $nextTick的使用场景介绍
  • (Ruby)Ubuntu12.04安装Rails环境
  • (搬运以学习)flask 上下文的实现
  • (第61天)多租户架构(CDB/PDB)
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (附源码)springboot教学评价 毕业设计 641310
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (十七)Flink 容错机制
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (五)activiti-modeler 编辑器初步优化
  • (一一四)第九章编程练习
  • (转) ns2/nam与nam实现相关的文件
  • 、写入Shellcode到注册表上线