网络编程 UDP 聊天功能
来源:互联网 发布:mycat优化 编辑:程序博客网 时间:2024/06/05 18:17
UDP(User Datagram Protocol),用户数据包协议。
在选择使用协议的时候,选择UDP必须要谨慎。在网络质量令人十分不满意的环境下,UDP协议数据包丢失会比较严重。但是由于UDP的特性:它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。比如我们聊天用的QQ就是使用的UDP协议。
服务器端程序:
#include <WinSock2.h>#include <stdio.h>#include <iostream>using namespace std;int main(){//加载套接字库,1.1版本WORD wVersionRequested;WSADATA wsaData;int err;wVersionRequested = MAKEWORD( 1, 1 );err = WSAStartup( wVersionRequested, &wsaData );if ( err != 0 ) {return 0;}if ( LOBYTE( wsaData.wVersion ) != 1 ||HIBYTE( wsaData.wVersion ) != 1 ) {WSACleanup( );return 0; }//创建套接字SOCKET sockSrv = socket(AF_INET,SOCK_DGRAM,0);//将套接字绑定到一个本地地址和端口上SOCKADDR_IN AddrSrv;AddrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);AddrSrv.sin_family = AF_INET;AddrSrv.sin_port = htons(6000);bind(sockSrv,(SOCKADDR *)&AddrSrv,sizeof(AddrSrv));//接收和发送char recvBuf[100];char sendBuf[100];char tempBuf[200];SOCKADDR_IN AddrClient;//存储发送端的地址信息int len = sizeof(AddrClient);while(1){recvfrom(sockSrv,recvBuf,strlen(recvBuf),0,(SOCKADDR*)&AddrClient,&len);if ('q' == recvBuf[0]){sendto(sockSrv,"q",strlen("q")+1,0,(SOCKADDR*)&AddrClient,len);cout << "end chat";break;}sprintf_s(tempBuf,"%s say : %s\n",inet_ntoa(AddrClient.sin_addr),recvBuf);cout << tempBuf;cout << "你要发送的数据:";gets(sendBuf);sendto(sockSrv,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&AddrClient,len);}closesocket(sockSrv);WSACleanup();}
客户端程序:
#include <WinSock2.h>#include <stdio.h>#include <iostream>using namespace std;int main(){//加载套接字库,1.1版本WORD wVersionRequested;WSADATA wsaData;int err;wVersionRequested = MAKEWORD( 1, 1 );err = WSAStartup( wVersionRequested, &wsaData );if ( err != 0 ) {return 0;}if ( LOBYTE( wsaData.wVersion ) != 1 ||HIBYTE( wsaData.wVersion ) != 1 ) {WSACleanup( );return 0; }//创建套接字SOCKET sockClient = socket(AF_INET,SOCK_DGRAM,0);//存放要发送到的机器的地址信息SOCKADDR_IN addr;addr.sin_addr.S_un.S_addr = inet_addr("59.73.163.254");//要发送的机器的IPaddr.sin_family = AF_INET;addr.sin_port = htons(6000);//要发送到的机器的端口//接收和发送char recvBuf[100];char sendBuf[100];char tempBuf[200];int len = sizeof(SOCKADDR);while(1){cout << "输入要发送的数据:";gets(sendBuf);sendto(sockClient,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&addr,sizeof(addr));//用addr接收返回的地址结构recvfrom(sockClient,recvBuf,strlen(recvBuf),0,(SOCKADDR*)&addr,&len);if ('q' == recvBuf[0]){sendto(sockClient,"q",strlen("q")+1,0,(SOCKADDR*)&addr,len);cout << "end chat";break;}sprintf_s(tempBuf,"%s say :%s\n",inet_ntoa(addr.sin_addr),recvBuf);cout << tempBuf;}closesocket(sockClient);WSACleanup();}
UDP编程流程:
另附,一个结构体的说明,和网络字节序的转换。和怎么将一个字符串转成一个点分十进制的IP形式等
note:别忘记附加ws2_32.lib库。然后再建立套接字和绑定时,可以写if语句判断一下,创建套接字、绑定是否成功等。WSAGetLastError()函数可以输出错误码。可以到VS--工具--错误查找中,输入该错误码查找错误!
0 0
- 网络编程 UDP 聊天功能
- 网络编程UDP模仿QQ聊天功能
- 网络编程实现聊天功能(UDP协议)
- 网络编程(UDP-聊天)
- 网络编程(UDP聊天)
- Java-网络编程(UDP-聊天)
- JAVA 网络编程 UDP(聊天程序)
- 网络编程(UDP协议-聊天程序)
- 网络编程 UDP入门及无限聊天
- 26-网络编程-09-网络编程(UDP协议-聊天程序)
- 【java编程】Socket编程之UDP模拟简单聊天功能
- Java 网络编程之 (UDP网络聊天程序)
- VC++之网络编程五 聊天编程实例(UDP)
- 基于Udp的Socket网络编程聊天程序
- Java_乔晓松_Java网络编程UDP实现黑窗口聊天
- Java网络编程UDP实现黑窗口聊天
- 基于Udp的Socket网络编程聊天程序
- 网络编程UDP协议——聊天软件
- PullScrollView源码解析
- unity3d shader之实时室外光线散射(大气散射)渲染
- STL中list的使用:
- 位向量法构造子集
- Spring配置mysql读写分离动态加载
- 网络编程 UDP 聊天功能
- 基于Spacebuilder开发问题汇总
- 列表显示(ListView)
- web.xml中webAppRootKey
- Linux源码分析工具-Source Insight
- IOS 视频直播/智能家居(一行行敲代码,从零开始)lesson:1整体架构
- class.getResource()的用法
- C++ STL ; 一些记录。自己学习用。
- 对话框(Dialog)