千家信息网

C++怎么实现简易UDP网络聊天室

发表于:2024-10-01 作者:千家信息网编辑
千家信息网最后更新 2024年10月01日,今天小编给大家分享一下C++怎么实现简易UDP网络聊天室的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们
千家信息网最后更新 2024年10月01日C++怎么实现简易UDP网络聊天室

今天小编给大家分享一下C++怎么实现简易UDP网络聊天室的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

工程名:NetSrv

NetSrv.cpp

//服务器端#include#includevoid main(){//加载套接字库 WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD(1,1);  err = WSAStartup(wVersionRequested,&wsaData); if(err!=0){  return;  } if(LOBYTE(wsaData.wVersion)!=1 || HIBYTE(wsaData.wVersion)!=1){  WSACleanup();  return;  } //创建套接字 SOCKET sockSrv = socket(AF_INET,SOCK_DGRAM,0);//第二个参数是数据报套接字 SOCKADDR_IN addrSrv;//对于服务器端,也就是接收端,先进行一个绑定,定义一个地址结构体的变量 addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//对结构体中的成员进行赋值,用htonl转换一下 //将主机数转换成无符号长整型的网络字节顺序。本函数将一个32位数从主机字节顺序转换成网络字节顺序。 addrSrv.sin_family=AF_INET;//地址族 addrSrv.sin_port=htons(6000);//端口号 //绑定套接字 bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));//将本地主机地址和端口进行绑定 //套接字,地址结构的指针,地址结构的长度 char recvBuf[100];//字符数组,接收信息 char sendBuf[100];//发送信息 char tempBuf[200];//存放中间数据 SOCKADDR_IN addrClient;//在接收的时候,获取对方的信息,地址结构体的变量 int len=sizeof(SOCKADDR);//初始化,长度为,地址结构体的长度 while(1)//保证通讯过程能够持续进行 {  //等待并接收数据  recvfrom(sockSrv,recvBuf,100,0,(SOCKADDR*)&addrClient,&len);  //套接字,接收数据buf,其长度,,地址结构的指针,指向整型的指针主要用来返回所接收的地址长度  if("q"==recvBuf[0])//判断接收的数据第一个字符是q吗,  {   sendto(sockSrv,"q",strlen("q")+1,0,(SOCKADDR*)&addrClient,len);   //若是,服务器也发一个q字符,套接字,q,长度多发一个字节,,地址用刚刚得到的,最后一个是地址结构的长度,通过len可得   printf("Chat end!");   break;  }  //如果接收的不是q,那么对数据进行一个格式化,放到tempBuf中,点分十进制的ip地址,所接收的数据。  sprintf(tempBuf,"%s say : %s",inet_ntoa(addrClient.sin_addr),recvBuf);  printf("%s",tempBuf);//将数据打印输出  //发送数据  printf("please input data:");    gets(sendBuf);//从标准输入流中获取一行数据,当我们输入一行数据,以回车,就把数据放到指定的内存指针中了。    sendto(sockSrv,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&addrClient,len);  //套接字,所要发送的数据,(这个是数据长度,用strlen获取)多发一个字节,所发送的地址,   }  //关闭套接字 closesocket(sockSrv); WSACleanup();//终止对套接字的使用}

NetClient.cpp

//客户端#include#includevoid main(){ //加载套接字库 WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD(1,1); err = WSAStartup(wVersionRequested,&wsaData); if(err!=0){  return; } if(LOBYTE(wsaData.wVersion)!=1|| HIBYTE(wsaData.wVersion)!=1){  WSACleanup( );  return; } //创建套接字 SOCKET sockClient = socket(AF_INET,SOCK_DGRAM,0); //,类型(数据报),自动选择合适协议 SOCKADDR_IN addrSrv; //基于upd的客户端(发送端),不需要去绑定,但是需要设置发送到对方机器的地址信息 //服务器端的地址信息,因为在本机上,所以还是127.0.0.1),用inet_addr将点分十进制转换成ulang类型 addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); addrSrv.sin_family = AF_INET; addrSrv.sin_port = htons(6000);//设置服务器端程序在哪个端口上等待数据  char recvBuf[100];//接收数据 char sendBuf[100];//发送数据 char tempBuf[200];//临时数据的存储  int len = sizeof(SOCKADDR);//接收所返回的地址结构的长度 while(1) {  //发送数据  printf("Please input data:");  gets(sendBuf);  sendto(sockClient,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&addrSrv,len);  //等待并接收数据  recvfrom(sockClient,recvBuf,100,0,(SOCKADDR*)&addrSrv,&len);  if("q"==recvBuf[0])  {   sendto(sockClient,"q",strlen("q")+1,0,(SOCKADDR*)&addrSrv,len);   printf("Chat end!");   break;  }  sprintf(tempBuf,"%s say : %s",inet_ntoa(addrSrv.sin_addr),recvBuf);  //服务器端ip地址信息(格式化),接收的数据  printf("%s",tempBuf);   } //关闭套接字 closesocket(sockClient); WSACleanup();}

ws2_32.lib

以上就是"C++怎么实现简易UDP网络聊天室"这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注行业资讯频道。

数据 地址 套接字 结构 长度 信息 服务器 服务 字节 网络 指针 知识 篇文章 主机 字符 顺序 简易 聊天室 C++ 一行 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 云平台下软件开发 计算机网络技术考什么职称 网络安全每日自查表 第三方网络技术售后服务 南京工程软件开发哪家好 关系数据库模式设计答案范剑波 参观网络安全宣传报告 网络安全重大违章减核指标 云服务器打开速度慢的解决方法 长沙计算机网络技术学费多少 网络安全意识的顺口溜 云帮手可以装在服务器里吗 学术界对网络安全的研究报告 java数据库开发培训 软件开发费用的增值税税率 数据库select关键字是 云南思燃软件开发 如何保留app内部数据库 一般人软件开发专票税点多少 组态王与三江串口服务器连接 3G计算机网络技术专业 百度的网络安全问题 计算机和服务器安装配置 讯飞软件开发二面通知 软件开发专业已经饱和了 富国互联网科技天天基金 E数据库文献库 充电桩linux系统软件开发 网络安全法政治笔记 手机内存改u盘 读取数据库
0