1 #pragma comment(lib,"Ws2_32.lib") 2 #include <stdio.h> 3 #include <Winsock2.h> 4 SOCKET sockSrv;//连接所用套节字 5 SOCKET sockConn; //监听套接字 6 SOCKADDR_IN addrSrv; 7 DWORD WINAPI funA(LPVOID lp); 8 //定义发送和接收的缓存数组 9 char sendBuf[50]; 10 char recvBuf[50]; 11 12 void main(){ 13 //要求使用的版本 14 WORD wVersionRequested; 15 // 16 WSADATA wsaData; 17 int err; 18 19 wVersionRequested = MAKEWORD(1,1); 20 //初始化WinSock dll库 WSAStartup 函数返回0表示初始化成功 21 err = WSAStartup(wVersionRequested,&wsaData); 22 //测试版本获取结果 23 //printf("%d\n",err); 24 if(err!=0){ 25 printf("WinSock初始化失败\n"); 26 return; 27 28 } 29 30 if(LOBYTE(wsaData.wVersion)!=1||HIBYTE(wsaData.wVersion)!=1){ 31 WSACleanup(); 32 return; 33 } 34 printf("服务器已启动......\n"); 35 36 //创建Socket套接字 37 sockSrv = socket(AF_INET,SOCK_STREAM,0); 38 //通讯的IP地址 htonl把主机字节转换成网络字节 39 addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY); 40 //使用IP地址族 41 addrSrv.sin_family=AF_INET; 42 //通讯的端口号 43 addrSrv.sin_port=htons(8888); 44 //函数绑定 将套接字与通讯地址建立联系 45 bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)); 46 //建立监听队列(把套接字转换成监听模式) 47 listen(sockSrv,5); 48 int len=sizeof(SOCKADDR); 49 50 //accept接受客户请求 51 sockConn = accept(sockSrv,(SOCKADDR*)&addrSrv,&len); 52 53 sprintf(sendBuf,"服务器IP: %s ;连接成功!",inet_ntoa(addrSrv.sin_addr)); 54 //发送消息 55 send(sockConn,sendBuf,strlen(sendBuf)+1,0); 56 57 HANDLE a; 58 DWORD dwT; 59 60 //参数1:使用默认的安全性;参数2:与调用线程一样的栈大小; 61 //参数3:线程入口函数地址;参数4:传递给线程的参数;参数5:线程创建标记;参数6:新线程的ID 62 a=CreateThread(NULL,0,funA,0,0,&dwT); 63 CloseHandle(a); 64 65 //消息循环接收和发送 66 while(1){ 67 //从控制台接收用户输入 68 //printf("服务器说:"); 69 scanf("%s",sendBuf); 70 //发送消息到客户端 71 send(sockConn,sendBuf,strlen(sendBuf)+1,0); 72 } 73 closesocket(sockConn); 74 //关闭连接和套接字 75 WSACleanup(); 76 } 77 78 DWORD WINAPI funA(LPVOID lp) 79 { 80 while(1){ 81 //从服务器接收数据显示到控制台 82 if(recv(sockConn,recvBuf,50,0) != -1){ 83 printf("客户端说:%s\n",recvBuf); 84 }else{ 85 printf("连接已经中断.....请检查客户端是否连接并重试。"); 86 system("pause"); 87 exit(0); 88 } 89 } 90 return 0; 91 }
WinSocket聊天程序实例(多线程),布布扣,bubuko.com
原文:http://www.cnblogs.com/rememberme/p/WinSocket.html