**c++基于tcp协议的socket编程实现一个简单服务器**

c++基于tcp协议的socket编程实现一个简单服务器
基于tcp的通信,可以利益socket套接字实现。通信,顾名思义需要服务器和客户端两者进行信息交互。
在这里插入图片描述
通过流程图我们可以看到编程实现服务器和客户端的步骤大致相同,而服务器则更为复杂一些。本文之给出了一个简单的服务器编程和基本思想

一、创建服务器套接字(create)。

二、服务器套接字进行信息绑定(bind),并开始监听连接(listen)。

三、接受来自用户端的连接请求(accept)。

#include <stdio.h>
#include <WinSock2.h>
#include <ws2tcpip.h> //两个处理协议
#include <string.h>
#pragma comment(lib,"ws2_32.lib)
int main(int argc,char* argv[])
{
//初始化socket
WORD sockVersion=MAKEWORD(2,2);
WSADATA wsaData;
if(0!=WSAStartup(sockVersion,&wsaData))
return 0;
}
//创建套接字
SOCKET slisten=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(slisten==INVALID_SOCKET)
{
    printf("sccket error");
    return 0;
}

//服务器绑定IP和端口
sockaddr_in sin;
sin.sin_family=AF_INET;
sin.sin_port=htons(80);  //设置端口 网页80
sin.sin_addr.S_un.S_addr=INADDR_ANY;
if(bind(slisten,(LPSOCKADDR)&sin,sizeof(sin))==SOCKET_ERROR)
{
    printf("bind error");
}

//开始监听,等待接收
if(listen(slisten,5)==SOCKET_ERROR)
{
    printf("listen error");
    return 0;
}

SOCKET sClient;
sockaddr_in remoteAddr;
int nAddrlen = sizeof(remoteAddr);
char revData[1024];

while(1)
{
    printf("等待接收....\n");
    sClient = accept(slisten,(SOCKADDR*)&remoteAddr,&nAddrlen);
    if(sClient==INVALID_SOCKET)
    {
        printf("accept error");
        continue;
    }

    char sendBuf[20]= {'\0'};
    memcpy(&sin.sin_addr,(void*)&remoteAddr.sin_addr,sizeof((void*)&remoteAddr.sin_addr));
    printf("收到一个连接%s\n",inet_ntoa(sin.sin_addr));
}
return 0
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_42894343/article/details/84927915