server.cpp

来自「该实例完成一个服务器端和客户端简单的会话通信过程.要求主机上安装TCP/IP协议」· C++ 代码 · 共 110 行

CPP
110
字号
#include "Winsock.h"
#include "windows.h"
#include "stdio.h"
#pragma comment(lib,"wsock32.lib")
#define RECV_PORT 2000
#define SEND_PORT 3000

SOCKET sock,sock1;
sockaddr_in ServerAddr;
sockaddr_in ClientAddr;
int Addrlen;

DWORD StartSock()
{
	WSADATA WSAData;
	if (WSAStartup(MAKEWORD(2,2),&WSAData)!=0)		//初始化套接字
	//WSAStartup:加载Winsock DLL的相应版本.
	//P1:版本XY,用MAKEWORD(X,Y)来生成,X-高位字节,Y-低位字节
	//P2:指向WSADATA结构的指针,接收Winsock库版本信息.
	{
		printf("sock init fail!\n");
		return(-1);
	}
	return(1);
}

DWORD CreateSocket()
{
	sock=socket(AF_INET,SOCK_STREAM,0);				//创建套接字
	//socket:创建套接字
	//P1:网络类型,一般为了AF_INET,表示在Internet域中通信
	//P2:套接字类型,SOCK_STREAM(会话套接字),SOCK_DGRAM(数据报套接字),SOCK_SEQPACKET,
	//   SOCK_RAW(原始套接字),SOCK_RDM.
	//P3:网络协议,取0,表示TCP/IP.
	//WSANOTINITIDLISED错误:未加载Winsock库
	if (sock==SOCKET_ERROR)
	{
		printf("sock create fail!\n");
		WSACleanup();
		return(-1);
	}
	ServerAddr.sin_family=AF_INET;					//填充服务器地址端口号
	ServerAddr.sin_addr.s_addr=htonl(INADDR_ANY);	//任何IP地址
	ServerAddr.sin_port=htons(RECV_PORT);			//IP地址上的端口

	if (bind(sock,(struct sockaddr FAR *)&ServerAddr,sizeof(ServerAddr))==SOCKET_ERROR)
	//bind:将一本地地址写一套接字绑定.
	//P1:一未绑定套接字的句柄.
	//P2:套接字地址结构.
	//WSAEADDRINUSE错误:另一个进程已经同本地IP地址及端口号绑定了.
	{
		printf("bind is the error");
		return(-1);
	}
	return(1);
}

DWORD ConnectProcess()
{
	char buff[80];
	Addrlen=sizeof(sockaddr_in);
	if (listen(sock,5)<0)
	//listen:侦听.
	//P1:一已绑定担未连接套接字的句柄.
	//P2:表示等待连接队列的最大长度.
	//多出的连接请求会造成一个WSAECONNEREFUSED错误.
	{
		printf("Listen error");
		return(-1);

	}
	printf("Listening...\n");
	for (;;)
	{
		sock1=accept(sock,(struct sockaddr FAR *)&ClientAddr,&Addrlen);
		//sock:在指定的套接字上接受一个连接
		//P1:套按字句柄,该套接字在listen()后已经侦听连接.
		//P2:连接请求方SOCKADDR_IN结构的地址.
		//P3:SOCKADDR_IN结构长度
	    for (;;)
		{
			memset(buff,0,80);
			if (recv(sock1,buff,80,0)<=0)
			//recv:接收数据.
			//P1:套接字句柄.
			//P2:接收缓冲区.
			//P3:接收缓冲区中的长度.
			//P4:调用的执行方式.
			//返回实际发送的字节数.
			{
				break;
			}
			printf(buff);
		//	printf("\n");
		}
	}
}

int main()
{
	if (StartSock()==-1)
		return(-1);
	if (CreateSocket()==-1)
		return(-1);
	if (ConnectProcess()==-1)
		return(-1);
	return(1);
}

	

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?