//////////////////////////////////////////////////////////////////////////// UDPServer.cpp#include <stdio.h>#include <WINSOCK2.H>#pragma comment(lib,"WS2_32.lib")#define BUF_SIZE64int main(void){WSADATAwsd;SOCKETs;intnRet;// 初始化通訊端動態庫if(WSAStartup(MAKEWORD(2,2),&wsd) != 0){printf("WSAStartup failed !\n");return 1;}// 建立通訊端s = socket(AF_INET,SOCK_DGRAM,0);if(s == INVALID_SOCKET){printf("socket() failed ,Error Code:%d\n",WSAGetLastError());WSACleanup();return 1;}SOCKETsocketSrv = socket(AF_INET,SOCK_DGRAM,0);SOCKADDR_IN addrSrv;SOCKADDR_IN addrClient;charbuf[BUF_SIZE];intlen = sizeof(SOCKADDR);// 設定伺服器位址ZeroMemory(buf,BUF_SIZE);addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);addrSrv.sin_family = AF_INET;addrSrv.sin_port = htons(5000);// 綁定通訊端nRet = bind(socketSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));if(SOCKET_ERROR == nRet) { printf("bind failed !\n"); closesocket(s); WSACleanup(); return -1; }// 從用戶端接收資料nRet = recvfrom(socketSrv,buf,BUF_SIZE,0,(SOCKADDR*)&addrClient,&len);if(SOCKET_ERROR == nRet) { printf("recvfrom failed !\n"); closesocket(s); WSACleanup(); return -1; }// 列印來自用戶端發送來的資料printf("Recv From Client:%s\n",buf);// 向用戶端發送資料sendto(socketSrv,"UDP Hello World !",sizeof("UDP Hello World !"),0,(SOCKADDR*)&addrClient,len);closesocket(s);WSACleanup();return 0;}
//////////////////////////////////////////////////////////////////////////// UDPClient.cpp#include <stdio.h>#include <WINSOCK2.H>#pragma comment(lib,"WS2_32.lib")#define BUF_SIZE64int main(void){WSADATAwsd;SOCKETs;// 初始化通訊端動態庫if(WSAStartup(MAKEWORD(2,2),&wsd) != 0){printf("WSAStartup failed !\n");return 1;}// 建立通訊端s = socket(AF_INET,SOCK_DGRAM,0);if(s == INVALID_SOCKET){printf("socket() failed, Error Code:%d\n",WSAGetLastError());WSACleanup();return 1;}charbuf[BUF_SIZE];// 接受資料SOCKADDR_INservAddr;// 伺服器通訊端地址SOCKETsockClient = socket(AF_INET,SOCK_DGRAM,0);intnRet;ZeroMemory(buf,BUF_SIZE);strcpy(buf,"UDP Hello World !");// 設定伺服器位址servAddr.sin_family = AF_INET;servAddr.sin_addr.S_un.S_addr = inet_addr("192.168.1.254");servAddr.sin_port = htons(5000);// 向伺服器發送資料int nServAddLen = sizeof(servAddr);if(sendto(sockClient,buf,BUF_SIZE,0,(sockaddr *)&servAddr,nServAddLen) == SOCKET_ERROR){printf("recvfrom() failed:%d\n",WSAGetLastError());closesocket(s);WSACleanup();return 1;}nRet = recvfrom(sockClient,buf,BUF_SIZE,0,(sockaddr *)&servAddr,&nServAddLen);if(SOCKET_ERROR == nRet) { printf("recvfrom failed !\n"); closesocket(s); WSACleanup(); return -1; }// 列印來自服務端發送來的資料printf("Recv From Server:%s\n",buf);closesocket(s);WSACleanup();return 0;}