1 // Server.cpp : 定义控制台应用程序的入口点。 2 // 3 4 #include "stdafx.h" 5 #include <iostream> 6 #include <winsock2.h> 7 8 #pragma comment(lib, "ws2_32.lib") // 加载静态库 9 10 using namespace std; 11 12 int _tmain(int argc, _TCHAR* argv[]) 13 { 14 ////////////////////////////////【1.加载套接字】/////////////////////////////// 15 // 16 WSADATA wsaData; 17 // 等于0 说明创建套接字成功, 否则失败! 18 if ( 0 != WSAStartup(MAKEWORD(2, 2), &wsaData) ) 19 { 20 cout<< "【WSAStartup】失败! " << endl; 21 return 0; 22 } 23 cout<< "加载套接字成功^_^ " << endl; 24 25 26 ////////////////////////////////【2.创建套接字】/////////////////////////////// 27 // 28 SOCKET m_Sock; 29 m_Sock = socket(AF_INET, SOCK_STREAM, 0); 30 if (INVALID_SOCKET == m_Sock) 31 { 32 cout<< "【socket】失败! " << endl; 33 WSACleanup(); 34 return 0; 35 } 36 cout<< "创建套接字成功^_^ " << endl; 37 38 39 ////////////////////////////////【3.绑定套接字】/////////////////////////////// 40 // 41 sockaddr_in bindAddr; 42 bindAddr.sin_family = AF_INET; // 协议族 43 bindAddr.sin_port = htons(9527); // 端口:9527 , 1234 44 bindAddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY); // 任何IP地址:127.0.0.1 45 int nBindRet = bind(m_Sock, (sockaddr*)&bindAddr, sizeof(sockaddr_in)); 46 if ( SOCKET_ERROR == nBindRet ) 47 { 48 cout<< "【bind】失败! " << endl; 49 closesocket(m_Sock); // 关闭套接字 50 WSACleanup(); // 卸载套接字 51 return 0; 52 } 53 cout<< "绑定套接字成功^_^ " << endl; 54 55 56 ////////////////////////////////【4.监听套接字】/////////////////////////////// 57 // 58 int nListenRet = listen(m_Sock, 5); // 最大能监听5个 59 if ( SOCKET_ERROR == nListenRet ) 60 { 61 cout<< "【listen】失败! " << endl; 62 closesocket(m_Sock); 63 WSACleanup(); 64 return 0; 65 } 66 cout<< "Listening . . . " << endl; 67 68 69 ////////////////////////////////【5.接受套接字】/////////////////////////////// 70 // 71 SOCKET accSock; // 为服务端接受客户端连接成功后, 产生的用于与客户端通信的socket. 72 sockaddr_in accAddr; // 接受客户端发送过来的 端口 / IP地址等信息 73 int accSize = sizeof(sockaddr_in); 74 accSock = accept(m_Sock, (sockaddr*)&accAddr, &accSize); 75 if ( INVALID_SOCKET == accSize ) 76 { 77 cout<< "【accept】失败! " << endl; 78 closesocket(m_Sock); 79 WSACleanup(); 80 return 0; 81 } 82 cout<< "成功连接客户端^_^ " << endl; 83 84 85 ////////////////////////////////【6.发送消息】/////////////////////////////// 86 // 87 int nSend = send(accSock, "欢迎你登陆", sizeof("欢迎你登陆"), 0); 88 if ( nSend <= 0 ) 89 { 90 cout<< "【send】失败! " << endl; 91 closesocket(accSock); 92 closesocket(m_Sock); 93 WSACleanup(); 94 return 0; 95 } 96 97 98 while (TRUE) 99 { 100 ////////////////////////////////【7.接收消息】/////////////////////////////// 101 // 102 char szRecvBuff[256] = { 0 }; 103 int nRecv = recv(accSock, szRecvBuff, sizeof(szRecvBuff), 0); 104 if ( SOCKET_ERROR == nRecv ) 105 { 106 cout<< "【recv】失败! " << endl; 107 Sleep(50); 108 continue; 109 } 110 cout<< szRecvBuff << endl; 111 112 113 ////////////////////////////////【8.发送消息】/////////////////////////////// 114 // 115 char szSendBuff[256] = { 0 }; 116 cin>> szSendBuff; // 向客户端发送的内容 117 int nSend2 = send(accSock, szSendBuff, sizeof(szSendBuff), 0); 118 if ( SOCKET_ERROR == nSend2 ) 119 { 120 cout<< "【send2】失败! " << endl; 121 Sleep(50); 122 continue; 123 } 124 125 } 126 127 getchar(); 128 closesocket(m_Sock); 129 WSACleanup(); 130 return 0; 131 }