vc++基于UDP的对话程序

来源:互联网 发布:网络呆梨是什么意思 编辑:程序博客网 时间:2024/06/03 20:00

服务器:

#include <winsock2.h>#include <stdio.h>int main(){WORD wVersionRequested;WSADATA wsaData;int err;wVersionRequested = MAKEWORD( 1, 1 );err = WSAStartup( wVersionRequested, &wsaData );if ( err != 0 ) {return -1;}if ( LOBYTE( wsaData.wVersion ) != 1 ||        HIBYTE( wsaData.wVersion ) != 1 ) {WSACleanup( );return -1; }SOCKET Srvier = socket(AF_INET, SOCK_DGRAM, 0);SOCKADDR_IN addr_srv;addr_srv.sin_family = AF_INET;addr_srv.sin_port = htons(6000);addr_srv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);bind(Srvier, (SOCKADDR *)&addr_srv, sizeof(addr_srv));char rbuf[100];char sbuf[100];char tbuf[100];SOCKADDR_IN addr_cli;int len = sizeof(addr_cli);while (1){recvfrom(Srvier, rbuf, 100,0, (SOCKADDR *)&addr_cli, &len);if ('q' == rbuf[0]){sendto(Srvier, "q", strlen("q")+1, 0, (SOCKADDR *)&addr_cli, len);printf("ceat end!\n");break;}sprintf(tbuf, "%s say : %s", inet_ntoa(addr_cli.sin_addr), rbuf);printf("%s\n", tbuf);printf("please input data:");gets(sbuf);sendto(Srvier, sbuf, strlen(sbuf)+1, 0, (SOCKADDR *)&addr_cli, len);}closesocket(Srvier);WSACleanup();return 0;}

客户端:

#include <winsock2.h>#include <stdio.h>int main(){WORD wVersionRequested;WSADATA wsaData;int err;wVersionRequested = MAKEWORD( 1, 1 );err = WSAStartup( wVersionRequested, &wsaData );if ( err != 0 ) {return -1;}if ( LOBYTE( wsaData.wVersion ) != 1 ||        HIBYTE( wsaData.wVersion ) != 1 ) {WSACleanup( );return -1; }SOCKET Client = socket(AF_INET, SOCK_DGRAM, 0);SOCKADDR_IN addr_srv;addr_srv.sin_family = AF_INET;addr_srv.sin_port = htons(6000);addr_srv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");int len = sizeof(addr_srv);char sbuf[100];char rbuf[100];char tbuf[100];while (1){printf("please input data:");gets(sbuf);sendto(Client, sbuf, strlen(sbuf)+1, 0, (SOCKADDR *)&addr_srv, len);recvfrom(Client, rbuf, 100, 0, (SOCKADDR *)&addr_srv, &len);if ('q' == rbuf[0]){sendto(Client, "q", strlen(sbuf)+1, 0, (SOCKADDR *)&addr_srv, len);printf("ceat end!\n");break;}sprintf(tbuf, "%s say: %s", inet_ntoa(addr_srv.sin_addr), rbuf);printf("%s\n", tbuf);}closesocket(Client);WSACleanup();return 0;}