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
}