运用C++ Socket API建立TCP服务端的6个步骤

运用C++ Socket API建立TCP服务端的6个步骤_第1张图片
使用Socket API建立简易TCP服务端的6个步骤
1、 建立一个Socket
2、 绑定接受客户端的连接的端口bind
3、 监听网络端口
4、 等待接受客户端连接
5、 向客户端发送一条数据send
6、 关闭Socket,closeSocket

#define WIN32_LEAN_AND_MEAN
#define _WinSock_DEPREGATED_NO_WARNINGS
//如果出现宏定义问题,可以将#include放到#include 前面
//或者在头文件进行预定义#define WIN32_LEAN_AND_MEAN

#include
#include 
#pragma comment(lib,"ws2_32.lib")

   
  int main()
      {
         //Windows Socket API实现与调用
           WORD ver =MAKEWORD(2,2);
	       WSADATA dat;
           WSAStartup(ver,&dat);
           
           //1、建立一个Socket套接字
           SOCKET  _socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

           //2、绑定接受客户端的连接的端口bind
	   sockaddr_in  _sin={};
           _sin.sin_family=AF_INET;
	   _sin.sin_port=htons(4567);//host to net unsigned short
           _sin.sin_addr.S_un.S_addr=INADDR_ANY;
	   bind(_sockt,&_sin,sizeof(_sin));
	   
	   if(SOCKET_ERROR==bind(_socket,(sockaddr*)&_sin,sizeof(_sin)))
              {
		           printf("ERROR,绑定用于接收客户端连接的网络端口失败...");
              }
       else
             {
                  printf("绑定用于接收客户端连接的网络端口成功...");
             }

	   //3、监听网络端口
           listen(_socket,5);
	   if(SOCKET_ERROR==listen(_socket,5))
             {
		        printf("ERROR,监听网络端口失败...");
              }
       else
             {
                  printf("监听网络端口成功...");
             }
           //4、等待接受客户端连接,accept
           sockaddr_in clientAddr={};
           int nAddrLen=sizeof(sockaddr_in);
           SOCKET _cSock=INVALID_SOCKET;    
           while(true)
           {
		        _cSock=accept(_socket,(sockaddr*)&clientAddr,&nAddrLen);
                 if(_cSock=INVALID_SOCKET)
                 {
               	     printf("ERROR,接收到无效客户端SOCKET...");
                 }
                 printf("新的客户端加入:IP=%s\n",inet_ntoa(cilentAddr.sin_addr));
           
	        //5、向客户端发送一条数据send
                char msgBuf[]="你好,我是服务器!";
                send(_cSock,msgBuf,strlen(msgBuf)+1,0);
            }
          
            //6、关闭Socket,closeSocket
           closesocket( _socket);

           WSACleanup();
     	   return 0;
       }

编写过程中,难免出现差错,欢迎大牛批评指正,本人专注图形图像开发,欢迎各位共同交流学习。

你可能感兴趣的:(网络服务器与架构)