基于Udp的Socket网络编程聊天程序

来源:互联网 发布:淘宝怎样设置货到付款 编辑:程序博客网 时间:2024/05/20 01:39

1.新建一个工程区Net

在工作区中添加两个工程 NetSrv 和 NetClient

为两个工程添加库文件 (Link中) ws2_32.lib

2.在工程NetSrv中添加Server.cpp文件

代码如下:

#include <WINSOCK2.H>#include <stdio.h>void main(){WORD wVersionRequested;WSADATA wsaData;int err;wVersionRequested = MAKEWORD( 2, 2 );err = WSAStartup( wVersionRequested, &wsaData );if ( err != 0 ){return;}if ( LOBYTE( wsaData.wVersion ) != 2 ||HIBYTE( wsaData.wVersion ) != 2 ) {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",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);printf("Please input data:\n");gets(sendBuf);sendto(sockSrv,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&addrClient,len);}closesocket(sockSrv);WSACleanup();}


3.在工程NetClient中添加Client.cpp文件

代码如下:

#include <WINSOCK2.H>#include <stdio.h>void main(){WORD wVersionRequested;WSADATA wsaData;int err;wVersionRequested = MAKEWORD( 2, 2 );err = WSAStartup( wVersionRequested, &wsaData );if ( err != 0 ){return;}if ( LOBYTE( wsaData.wVersion ) != 2 ||HIBYTE( wsaData.wVersion ) != 2 ) {WSACleanup();return; }SOCKET sockClient = socket(AF_INET,SOCK_DGRAM,0);SOCKADDR_IN addrSrv;addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");addrSrv.sin_family=AF_INET;addrSrv.sin_port = htons(6000);char recvBuf[100];char sendBuf[100];char tempBuf[200];int len = sizeof(SOCKADDR);while (1){printf("Please input data:\n");gets(sendBuf);sendto(sockClient,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&addrSrv,len);   recvfrom(sockClient,recvBuf,100,0,(SOCKADDR*)&addrSrv,&len);if ('q' == recvBuf[0]){sendto(sockClient,"q",strlen("q")+1,0,(SOCKADDR*)&addrSrv,len);printf("Chat end!\n");break;}sprintf(tempBuf,"%s say : %s",inet_ntoa(addrSrv.sin_addr),recvBuf);printf("%s\n",tempBuf);}closesocket(sockClient);WSACleanup();}

4.先运行服务端程序,再运行客户端程序

可以聊天了,但是只能客户端发一句,服务端发一句,比较呆板

原创粉丝点击