⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 server.cpp

📁 该实例完成一个服务器端和客户端简单的会话通信过程.要求主机上安装TCP/IP协议,并设定IP.服务器端和客户端使用同一台主机的不同端口号,服务器端使用的端口号为2000,客户端使用的端口号为3000.
💻 CPP
字号:
#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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -