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】失败!\n" << endl;
21 return 0;
22 }
23 cout<< "加载套接字成功^_^\n" << 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】失败!\n" << endl;
33 WSACleanup();
34 return 0;
35 }
36 cout<< "创建套接字成功^_^\n" << 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】失败!\n" << endl;
49 closesocket(m_Sock); // 关闭套接字
50 WSACleanup(); // 卸载套接字
51 return 0;
52 }
53 cout<< "绑定套接字成功^_^\n" << endl;
54
55
56 ////////////////////////////////【4.监听套接字】///////////////////////////////
57 //
58 int nListenRet = listen(m_Sock, 5); // 最大能监听5个
59 if ( SOCKET_ERROR == nListenRet )
60 {
61 cout<< "【listen】失败!\n" << endl;
62 closesocket(m_Sock);
63 WSACleanup();
64 return 0;
65 }
66 cout<< "Listening . . .\n" << 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】失败!\n" << endl;
78 closesocket(m_Sock);
79 WSACleanup();
80 return 0;
81 }
82 cout<< "成功连接客户端^_^\n" << endl;
83
84
85 ////////////////////////////////【6.发送消息】///////////////////////////////
86 //
87 int nSend = send(accSock, "欢迎你登陆", sizeof("欢迎你登陆"), 0);
88 if ( nSend <= 0 )
89 {
90 cout<< "【send】失败!\n" << 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】失败!\n" << 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】失败!\n" << endl;
121 Sleep(50);
122 continue;
123 }
124
125 }
126
127 getchar();
128 closesocket(m_Sock);
129 WSACleanup();
130 return 0;
131 }