1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 网络编程第三讲UDP编写

网络编程第三讲UDP编写

时间:2023-12-23 18:48:03

相关推荐

网络编程第三讲UDP编写

网络编程第三讲UDP编写

一丶UDP简介

UDP是面向无连接的.就是说数据传输会丢掉.网络延时比较大的情况下.会早上丢包.例如视频通话.就是UDP

UDP不需要建立建立. 下面有UDP编写流程图

下图为TCP 跟UDP的区别.

UDP下收发函数有区别.

发送数据: TCP: send UDP sendto

接受数据:TCP: recv UDP recvfrom

二丶UDP编写的完整代码

服务端:

#include <stdio.h>#include <winsock2.h>#include <Windows.h>#pragma comment(lib,"ws2_32.lib")#define PORT 6000int main(int argc, char* argv[]){//初始化网络环境 WSADATA wsa;if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0){printf("WSAStartup failed\n");return -1;}//建立一个UDP的socketSOCKET sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);if (sock == SOCKET_ERROR){printf("create socket failed\n");return -1;}//绑定地址信息 sockaddr_in serverAddr;serverAddr.sin_family = AF_INET;serverAddr.sin_port = htons(PORT);serverAddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);bind(sock, (sockaddr*)&serverAddr, sizeof(sockaddr));char buf[512];while (TRUE){memset(buf, 0, 512);// 网络节点的信息,用来保存客户端的网络信息 sockaddr_in clientAddr;memset(&clientAddr, 0, sizeof(sockaddr_in));int clientAddrLen = sizeof(sockaddr);//接收客户端发来的数据int ret = recvfrom(sock, buf, 512, 0,(sockaddr*) &clientAddr,&clientAddrLen );printf("Recv msg:%s from IP:[%s] Port:[%d]\n", buf,inet_ntoa(clientAddr.sin_addr),ntohs(clientAddr.sin_port));// 发一个数据包返回给客户sendto(sock, "Hello World!", strlen("Hello World!"), 0, (sockaddr*)&clientAddr, clientAddrLen);printf("Send msg back to IP:[%s] Port:[%d]\n", inet_ntoa(clientAddr.sin_addr), ntohs(clientAddr.sin_port));}return 0;}

客户端

#include <stdio.h>#include <winsock2.h>#include <Windows.h>#pragma comment(lib,"ws2_32.lib")#define PORT 6000int main(int argc, char* argv[]){//初始化网络环境 WSADATA wsa;if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0){printf("WSAStartup failed\n");return -1;}//建立一个UDP的socketSOCKET sockClient = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);if (sockClient == INVALID_SOCKET){printf("create socket failed\n");return -1;}// 申明一个网络地址信息的结构体,保存服务器的地址信息sockaddr_in addr = { 0 };addr.sin_family = AF_INET;addr.sin_port = htons(PORT);addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");char buf[] = "client test!";//发送数据int dwSent = sendto(sockClient, buf, strlen(buf), 0, (SOCKADDR *)&addr, sizeof(SOCKADDR));if (dwSent == 0){printf("send %s failed\n", buf);return -1;}printf("send msg:%s\n", buf);char recvBuf[512];memset(recvBuf, 0, 512);sockaddr_in addrSever = { 0 };int nServerAddrLen=sizeof(sockaddr_in);// 接收数据int dwRecv = recvfrom(sockClient, recvBuf, 512, 0, (SOCKADDR *)&addrSever,&nServerAddrLen);printf("Recv msg from server : %s\n", recvBuf);//关闭SOCKET连接 closesocket(sockClient);//清理网络环境 WSACleanup();system("pause");return 0;}

链接:/s/11Gzqv-wynDslzCMnTgnpCw 密码:8f63

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。