基于UDP的网络聊天程序

您所在的位置:网站首页 lenovoideapad11015isk 基于UDP的网络聊天程序

基于UDP的网络聊天程序

2024-07-04 05:00| 来源: 网络整理| 查看: 265

思路

基于UDP面向无连接的socket编程的发送端程序流程如下: (1)创建套接字socket。

(2)将套接字绑定(bind)到一个本地地址和端口上。

(3)等待接收数据(recvfrom)。

(4)释放套接字资源(closesocket)。

基于UDP面向无连接的socket编程的接收端程序流程如下:

(1)创建套接字socket。

(2)向服务器发送数据(sendto)。

(3)释放套接字资源(closesocket)。

一、服务器端代码 #include #include /*引入winsock头文件*/ int main() { /*------------------------------------------------------------------*/ /*----------------------定义变量--------------------------------*/ /*------------------------------------------------------------------*/ char Receivebuf[100]; /*接受数据的缓冲区*/ int length; SOCKET socket_send; /*定义套接字*/ SOCKADDR_IN Server_add; /*服务器地址信息结构*/ SOCKADDR_IN Client_add; /*客户端地址信息结构*/ WORD wVersionRequested; /*字(word):unsigned short*/ WSADATA wsaData; /*库版本信息结构*/ int error; /*表示错误*/ /*------------------------------------------------------------------*/ /*-------------------------初始化套接字库---------------------------*/ /*------------------------------------------------------------------*/ /*定义版本类型。将两个字节组合成一个字,前面是第字节,后面是高字节*/ wVersionRequested = MAKEWORD( 2, 2 ); /*加载套接字库,初始化Ws2_32.dll动态链接库*/ error = WSAStartup( wVersionRequested, &wsaData); if(error!=0) { printf("加载套接字失败!"); return 0; /*程序结束*/ } /*判断请求加载的版本号是否符合要求*/ if ( LOBYTE( wsaData.wVersion ) != 2 || HIBYTE( wsaData.wVersion ) != 2 ) { WSACleanup( ); /*不符合,关闭套接字库*/ return 0; /*程序结束*/ } /*创建套接字*/ socket_send=socket(AF_INET,SOCK_DGRAM,0); /*----------------------设置服务器地址-----------------------*/ Server_add.sin_family=AF_INET;/*地址家族,对于必须是AF_INET,注意只有它不是网络网络字节顺序*/ Server_add.sin_addr.S_un.S_addr = htonl(INADDR_ANY); Server_add.sin_port=htons(5000);/*端口号*/ /*绑定套接字*/ bind(socket_send,(SOCKADDR*)&Server_add,sizeof(SOCKADDR)); length=sizeof(SOCKADDR); recvfrom(socket_send,Receivebuf,100,0,(SOCKADDR*)&Client_add,&length); printf("%s\n",Receivebuf); /*------------------------------------------------------------------*/ /*-----------------------释放套接字,关闭动态库----------*/ /*------------------------------------------------------------------*/ closesocket(socket_send); /*释放套接字资源*/ WSACleanup(); /*关闭动态链接库*/ return 0; }

在程序运行之前,要添加 ws2_32.lib 在这里插入图片描述

二、客户端端代码 #include #include /*引入winsock头文件*/ int main() { /*------------------------------------------------------------------*/ /*----------------------定义变量--------------------------------*/ /*------------------------------------------------------------------*/ SOCKET socket_client; /*定义套接字*/ SOCKADDR_IN Server_add; /*服务器地址信息结构*/ WORD wVersionRequested; /*字(word):unsigned short*/ WSADATA wsaData; /*库版本信息结构*/ int error; /*表示错误*/ /*------------------------------------------------------------------*/ /*-------------------------初始化套接字库---------------------------*/ /*------------------------------------------------------------------*/ /*定义版本类型。将两个字节组合成一个字,前面是第字节,后面是高字节*/ wVersionRequested = MAKEWORD( 2, 2 ); /*加载套接字库,初始化Ws2_32.dll动态链接库*/ error = WSAStartup( wVersionRequested, &wsaData); if(error!=0) { printf("加载套接字失败!"); return 0; /*程序结束*/ } /*判断请求加载的版本号是否符合要求*/ if ( LOBYTE( wsaData.wVersion ) != 2 || HIBYTE( wsaData.wVersion ) != 2 ) { WSACleanup( ); /*不符合,关闭套接字库*/ return 0; /*程序结束*/ } /*创建套接字*/ socket_client=socket(AF_INET,SOCK_DGRAM,0); /*----------------------设置服务器地址-----------------------*/ Server_add.sin_family=AF_INET;/*地址家族,对于必须是AF_INET,注意只有它不是网络网络字节顺序*/ Server_add.sin_addr.S_un.S_addr = inet_addr("192.168.1.238"); Server_add.sin_port=htons(5000);/*端口号*/ sendto(socket_client,"ILoveChina",strlen("ILoveChina")+1,0,(SOCKADDR*)&Server_add,sizeof(SOCKADDR)); /*------------------------------------------------------------------*/ /*-----------------------释放套接字,关闭动态库----------*/ /*------------------------------------------------------------------*/ closesocket(socket_client); /*释放套接字资源*/ WSACleanup(); /*关闭动态链接库*/ return 0; }

在程序运行之前,要添加 ws2_32.lib



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3