VC++ 基于UDP的控制台聊天程序socket通信

来源:互联网 发布:网络监控工程宝怎么用 编辑:程序博客网 时间:2024/05/17 02:21

程序分为客户端和服务器端,具体实现过程可以看前面的文章 VC++ socket通信 总结

下面把服务端和客户端程序列出来。

服务器端程序:

#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",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();}
客户端程序如下:

#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 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();}

下面是程序的运行界面:


另外,不要忘记把ws2_32.lib链接库连接一下。



                                                                                                By 刘洼村


原创粉丝点击