C++Socket(UDP)

来源:互联网 发布:常见的网络架构有哪些 编辑:程序博客网 时间:2024/05/23 23:16
/************服务端程序*************/#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(6000);//绑定套接字和地址.bind(sockSrv, (SOCKADDR *)&addrSrv, sizeof(SOCKADDR));char recvBuf[100];char sendBuf[100];char tempBuf[200];SOCKADDR_IN addrClient;int len = sizeof(SOCKADDR);while(1){//接收数据.recvfrom(sockSrv, recvBuf, 100, 0, (SOCKADDR *)&addrClient, &len);if('q'==recvBuf[0]){sendto(sockSrv, "q", 1, 0, (SOCKADDR *)&addrClient, sizeof(SOCKADDR));printf("chat end ! \n");break;}sprintf(tempBuf, "%s say: %s", inet_ntoa(addrClient.sin_addr), recvBuf);printf("%s\n", tempBuf);printf("please input data:\n");gets(sendBuf);//发送数据.sendto(sockSrv, sendBuf, 100, 0, (SOCKADDR*)&addrClient, sizeof(SOCKADDR));}//关闭套接字.closesocket(sockSrv);//关闭套接字库.WSACleanup();}/************客户端程序*************/#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 addrClient;addrClient.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");addrClient.sin_family = AF_INET;addrClient.sin_port = htons(6000);char recvBuf[100];char sendBuf[100];char tempBuf[200];int len = sizeof(SOCKADDR);while(1){printf("please input date:");gets(sendBuf);sendto(sockClient, sendBuf,strlen(sendBuf)+1, 0, (SOCKADDR*)&addrClient, len);recvfrom(sockClient, recvBuf, 100, 0, (SOCKADDR*)&addrclient, &len);if(recvBuf[0] == 'q'){sendto(sockClient, 'q', strlen('q')+1, 0, (SOCKADDR*)&addrClient,len);printf("Chat end!\n");break;}sprintf(tempBuf, "%s say: %s", inet_ntoa(addrClient.sin_addr), recvBuf);printf("%s \n",tempBuf);}closesocket(sockClient);WSACleanup();}