windows下socket编程,多线程
来源:互联网 发布:背地图的软件 编辑:程序博客网 时间:2024/06/06 00:51
sercer端
#include <stdio.h>#include <process.h>#include <Winsock2.h>#pragma comment(lib,"ws2_32.lib")void send(void *a);void showIP();SOCKET sockConn;SOCKADDR_IN addrClient;//连接上的客户端IP地址void main() {printf("server's information\n");showIP();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,流式SOCKETSOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0); //配置监听地址和端口:SOCKADDR_IN addrSrv; addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY); addrSrv.sin_family=AF_INET; addrSrv.sin_port=htons(6003); bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));//绑定端口 listen(sockSrv,5); int len=sizeof(SOCKADDR); sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len); //接受客户端连接,获取客户端的IP地址 _beginthread(send,0,NULL);char recvBuf[50];while(1){ //char sendBuf[50];//char sendMes[50];//scanf("%s",sendMes);//printf("-->:%s\n",sendMes);//sprintf(sendBuf,sendMes,inet_ntoa(addrClient.sin_addr));//组合消息发送出去 //send(sockConn,sendBuf,strlen(sendBuf)+1,0);//发送消息到客户端 //recv(sockConn,recvBuf,50,0);//接受客户端消息 printf("<--:%s\n",recvBuf);}closesocket(sockConn);//断开连接 } void send(void *a){char sendBuf[50];char sendMes[50];while (1){gets(sendMes);printf("-->:%s\n",sendMes);sprintf(sendBuf,sendMes,inet_ntoa(addrClient.sin_addr));//组合消息发送出去 send(sockConn,sendBuf,strlen(sendBuf)+1,0);//发送消息到客户端 }_endthread();}void showIP() //定义CheckIP()函数,用于获取本机IP地址 {WSADATA wsaData;char name[20];//定义用于存放获得的主机名的变量 char *ip;//定义IP地址变量 PHOSTENT hostinfo; //调用MAKEWORD()获得Winsock版本的正确值,用于加载Winsock库 if ( WSAStartup( MAKEWORD(2,0), &wsaData ) == 0 ) { //现在是加载Winsock库,如果WSAStartup()函数返回值为0,说明加载成功,程序可以继续 if( gethostname ( name, sizeof(name)) == 0) { //如果成功地将本地主机名存放入由name参数指定的缓冲区中 if((hostinfo = gethostbyname(name)) != NULL) { //这是获取主机名,如果获得主机名成功的话,将返回一个指针,指向hostinfo,hostinfo //为PHOSTENT型的变量,下面即将用到这个结构体 ip = inet_ntoa (*(struct in_addr *)*hostinfo->h_addr_list); //调用inet_ntoa()函数,将hostinfo结构变量中的h_addr_list转化为标准的点分表示的IP //地址(如192.168.0.1) printf("%s\n",ip);//输出IP地址printf("%s\n",name);} } WSACleanup();//卸载Winsock库,并释放所有资源 }}
client端
#include <stdio.h> #include <Winsock2.h>#include <process.h>#pragma comment(lib, "ws2_32.lib") SOCKET sockClient;void send(void *p);void main(){ WORD wVersionRequested; WSADATA wsaData;//WSAata用来存储系统传回的关于WinSocket的信息 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; } sockClient=socket(AF_INET,SOCK_STREAM,0);//AF_INET表示TCP连接 //初始化连接与端口号 SOCKADDR_IN addrSrv; char IP[20];printf("Please input server's IP: ");scanf("%s",IP);addrSrv.sin_addr.S_un.S_addr=inet_addr(IP);//本机地址,服务器在本机开启 addrSrv.sin_family=AF_INET; addrSrv.sin_port=htons(6003);//设置端口号connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));//连接服务器int hand = _beginthread(send,0,NULL);char recvBuf[50];while (1){//char sendMes[50];//scanf("%s",sendMes);recv(sockClient,recvBuf,50,0);//接受数据printf("<--:%s\n",recvBuf);//printf("-->:%s\n",sendMes);//send(sockClient,sendMes,strlen(sendMes)+1,0);//发送数据 }closesocket(sockClient);//关闭连接 WSACleanup();system("pause");}void send(void *p){char sendMes[50];while (1){gets(sendMes);printf("-->:%s\n",sendMes);send(sockClient,sendMes,strlen(sendMes)+1,0);//发送数据 }_endthread();}
0 0
- windows下socket编程,多线程
- 多线程下SOCKET编程
- windows下 socket编程
- windows 下socket 编程
- windows下socket 多线程服务器
- Windows 下多线程编程
- socket在windows下编程
- Windows下Socket编程初探
- Windows 下的socket编程
- Windows下多线程编程指南
- 初学windows 下 多线程编程
- Windows下多线程编程指南 .
- Windows下多线程编程指南
- Windows下多线程编程(一)
- Windows下多线程编程(二)
- linux 下多线程epoll编程 -socket
- linux 下多线程epoll编程 -socket
- Windows 2000下的Raw Socket编程
- xcode 如何设置第三方库不使用ARC
- 元件使用教程——数据类元件
- 关于Oracle Timezone的一点总结
- Pomelo 新手入门(二)
- 已知旋转中心和旋转角度,获得旋转之后的一组点坐标
- windows下socket编程,多线程
- 前端知识汇总【面试用】(二)
- Spring jws 快速发布webservice
- 细说websocket - php篇
- android 幻灯片 图片来自instagram 图片大且多,使用软引用,幻灯片播放还有水平滑动使用ViewFliper
- 左侧蓝 目录树
- DBCC大全集之(适用版本MS SQLServer 2008 R2)----DBCC SHOW_STATISTICSDBCC SHOW_STATISTICS 显示表或索引视图的当前查询优化统计信息
- 网站左侧广告代码(商务通)
- 2013年新浪微博媒体报告年度盘点