服务端升级为select模型处理多客户端

1 服务端升级为select模型处理多客户端

1.1 概述

之前我们的设计是服务端与客户端1对1的阻塞模式网络程序,我们这里对服务端进行升级,引入select模型,使得服务端有能力处理多个客户端。

在这里插入图片描述
Socket的select模型:

int select (
  int nfds,                           
  fd_set FAR * readfds,               
  fd_set FAR * writefds,              
  fd_set FAR * exceptfds,             
  const struct timeval FAR * timeout  
);

1.2 服务端实现

server.cpp:

#define WIN32_LEAN_AND_MEAN
#define _WINSOCK_DEPRECATED_NO_WARNINGS

#include<windows.h>
#include<WinSock2.h>
#include<stdio.h>

#include <vector>

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

enum CMD
{
   
	CMD_LOGIN,
	CMD_LOGIN_RESULT,
	CMD_LOGOUT,
	CMD_LOGOUT_RESULT,
	CMD_ERROR
};

struct DataHeader
{
   
	short dataLength;
	short cmd;
};

//DataPackage
struct Login: public DataHeader
{
   
	Login()
	{
   
		dataLength = sizeof(Login);
		cmd = CMD_LOGIN;
	}
	char userName[32];
	char PassWord[32];
};

struct LoginResult : public DataHeader
{
   
	LoginResult()
	{
   
		dataLength = sizeof(LoginResult);
		cmd = CMD_LOGIN_RESULT;
		result = 0;
	}
	int result;
};

struct Logout : public DataHeader
{
   
	Logout()
	{
   
		dataLength = sizeof(Logout);
		cmd = CMD_LOGOUT;
	}
	char userName[32];
};

struct LogoutResult : public DataHeader
{
   
	LogoutResult()
	{
   
		dataLength = sizeof(LogoutResult);
		cmd =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值