UDP服务器是做什么用的?

UDP服务器是做什么用的?,第1张

UDP服务器,就是首发数据,进行数据处理的。与TCP不同的是不用建立连接,直接调用recvfrom来收包。\x0d\x0a开始就是基本的socket初始化地址什么的。\x0d\x0a要求多个线程处理客户端命令,那recvfrom收包后,考虑把客户端的地址信息保存,便于sendto,对接收的数据包,交给线程进行处理,每个线程可以向一块共享内存、队列里写入收到的数据和对应的客户端信息,每次写的时候对这块共享资源加锁,多个线程对共享资源读是加锁,读完解锁,并开始处理数据。\x0d\x0a处理完,用sendto发回去。\x0d\x0a不是什么大项目。小程序而已。

服务器端(接收端)程序:

1、创建套接字(socket)。

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

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

4、关闭套接字。

客户端(发送端)程序:

1、创建套接字(socket)。

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

3、关闭套接字。

client.c#include <Winsock2.h>#include <stdio.h>void 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 addrSrv.sin_addr.S_un.S_addr=inet_addr("222.26.28.227") addrSrv.sin_family=AF_INET addrSrv.sin_port=htons(5001) sendto(sockClient,"Hello",strlen("Hello")+1,0, (SOCKADDR*)&addrSrv,sizeof(SOCKADDR))// printf("%d\n", sendto(sockClient,"Hello",strlen("Hello")+1,0,//(SOCKADDR*)&addrSrv,sizeof(SOCKADDR))) closesocket(sockClient) WSACleanup()}server.c#include <Winsock2.h>#include <stdio.h>void 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) addrSrv.sin_family=AF_INET addrSrv.sin_port=htons(5001) bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)) SOCKADDR_IN addrClient int len = sizeof(SOCKADDR)// int len=sizeof(addrClient) char recvBuf[100] = "\0" printf("Wating for message from others: \n") int a = recvfrom(sockSrv,recvBuf,100,0, (SOCKADDR*)&addrClient,&len) if(a == SOCKET_ERROR) { printf("Error\n") printf("%s\n", WSAGetLastError()) } printf("%s\n",recvBuf) closesocket(sockSrv) WSACleanup()}


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/218087.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-06
下一篇2023-04-06

发表评论

登录后才能评论

评论列表(0条)

    保存