基于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.先运行服务端程序,再运行客户端程序
可以聊天了,但是只能客户端发一句,服务端发一句,比较呆板
- 基于Udp的Socket网络编程聊天程序
- 基于Udp的Socket网络编程聊天程序
- 网络编程与多线程的应用--基于socket udp编写一个简单聊天程序
- 基于TCP/UDP的网络聊天程序
- 网络编程应用:基于UDP协议【实现聊天程序】--练习
- 基于Udp的Socket网络编程
- 基于UDP的windows网络Socket编程
- 基于UDP协议的Socket网络编程
- VC++ 基于UDP的控制台聊天程序socket通信
- 基于UDP的聊天程序
- 基于UDP的聊天程序
- linux网络编程之socket(十四):基于UDP协议的网络程序
- linux网络编程之socket(十四):基于UDP协议的网络程序
- linux网络编程之socket(十四):基于UDP协议的网络程序
- linux网络编程之socket(十四):基于UDP协议的网络程序
- linux网络编程之socket(十四):基于UDP协议的网络程序
- linux网络编程之socket(十四):基于UDP协议的网络程序
- 网络编程-基于UDP的Socket网络编程(补充)
- SSI框架搭建相关问题
- 练习:打开,保存文件
- java继承 父类子类方法调用问题 属性和静态方法是没有多态的
- 正则表达式简单验证内容中的括号是否配对
- snprintf、stringstream、strstream的对比分析
- 基于Udp的Socket网络编程聊天程序
- hibernate继承关系映射
- 黑马程序员_各种方法解析XML文件学习
- 编译带有第三方jar包的ap,如何才能过用mmm编译成功(update 20100728)
- TCP 复制文件
- 子层的margin-top属性应用到父层上的解决方法?
- TCP--文本转换服务器
- 黑马程序员_XML学习总结(一)
- Android流量统计TrafficStats类的使用