如何建立UDP连接

如何建立UDP连接,第1张

UDP(User Data Protocol,用户数据报协中搭悉议)是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去!

UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境。比如,我们经常使用“ping”命令来测试两台主机之间TCP/IP通信是否正常,其实“ping”命令的原理就是向对方主机发送UDP数据包,然卖乎后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。例如,在默认状态下,一次“ping” *** 作发送4个数据包(如图2所示)。大家可以看到,发送的数据枝卖包数量是4包,收到的也是4包(因为对方主机收到后会发回一个确认收到的数据包)。这充分说明了UDP协议是面向非连接的协议,没有建立连接的过程。正因为UDP协议没有连接的过程,所以它的通信效果高;但也正因为如此,它的可靠性不如TCP协议高。QQ就使用UDP发消息,因此有时会出现收不到消息的情况。

(望楼主采纳哦)

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

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()}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8279313.html

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

发表评论

登录后才能评论

评论列表(0条)

保存