网络编程第三讲UDP编写
生活随笔
收集整理的這篇文章主要介紹了
网络编程第三讲UDP编写
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
? 網(wǎng)絡(luò)編程第三講UDP編寫
一丶UDP簡(jiǎn)介
UDP是面向無(wú)連接的.就是說數(shù)據(jù)傳輸會(huì)丟掉.網(wǎng)絡(luò)延時(shí)比較大的情況下.會(huì)早上丟包.例如視頻通話.就是UDP
UDP不需要建立建立. 下面有UDP編寫流程圖
下圖為TCP 跟UDP的區(qū)別.
UDP下收發(fā)函數(shù)有區(qū)別.??
發(fā)送數(shù)據(jù): TCP: send UDP sendto
接受數(shù)據(jù):TCP: recv? UDP recvfrom
二丶UDP編寫的完整代碼
服務(wù)端:
#include <stdio.h> #include <winsock2.h> #include <Windows.h>#pragma comment(lib,"ws2_32.lib") #define PORT 6000int main(int argc, char* argv[]) {//初始化網(wǎng)絡(luò)環(huán)境 WSADATA wsa;if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0){printf("WSAStartup failed\n");return -1;}//建立一個(gè)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);// 網(wǎng)絡(luò)節(jié)點(diǎn)的信息,用來(lái)保存客戶端的網(wǎng)絡(luò)信息 sockaddr_in clientAddr;memset(&clientAddr, 0, sizeof(sockaddr_in));int clientAddrLen = sizeof(sockaddr);//接收客戶端發(fā)來(lái)的數(shù)據(jù)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));// 發(fā)一個(gè)數(shù)據(jù)包返回給客戶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 6000 int main(int argc, char* argv[]) {//初始化網(wǎng)絡(luò)環(huán)境 WSADATA wsa;if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0){printf("WSAStartup failed\n");return -1;}//建立一個(gè)UDP的socketSOCKET sockClient = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);if (sockClient == INVALID_SOCKET){printf("create socket failed\n");return -1;}// 申明一個(gè)網(wǎng)絡(luò)地址信息的結(jié)構(gòu)體,保存服務(wù)器的地址信息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!";//發(fā)送數(shù)據(jù)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);// 接收數(shù)據(jù)int dwRecv = recvfrom(sockClient, recvBuf, 512, 0, (SOCKADDR *)&addrSever,&nServerAddrLen);printf("Recv msg from server : %s\n", recvBuf);//關(guān)閉SOCKET連接 closesocket(sockClient);//清理網(wǎng)絡(luò)環(huán)境 WSACleanup();system("pause");return 0; }
?鏈接:https://pan.baidu.com/s/11Gzqv-wynDslzCMnTgnpCw 密碼:8f63
轉(zhuǎn)載于:https://www.cnblogs.com/iBinary/p/9671780.html
總結(jié)
以上是生活随笔為你收集整理的网络编程第三讲UDP编写的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Xshell5
- 下一篇: [转帖]TLS 版本问题