c++百万并发
文章平均质量分 52
zyddst1314
奔跑的脚步不要停
展开
-
7.1---客户端与服务端的粘包现象演示(网络缓冲区)
客户端代码和服务端代码都使用前面文章所封装的class本文先对缓冲区做各种测试,文章最后会介绍粘包现象。接下来的几篇文章中会介绍客户端与服务端如何处理这种粘包现象一、测试1:循环发送与接收少量数据(8kb)测试1的过程为:服务端:服务端代码基本不变,其接收客户端发送过来的数据,在收到数据之后将相应数据回送给客户端客户端:客户端使用while()循环一直向服务端发送程序客户端与服务端的每次交互的单个数据包比较小,只有8字节//服务端代码如下#include "EasyTcpServer.hpp原创 2021-07-01 19:45:32 · 261 阅读 · 0 评论 -
6.1---将客户端封装为class
一、概述在前面的文章中,客户端的代码都是以面向过程的形式展现,本文将之前客户端的代码封装为一个class二、代码如下MessageHeader.hpp这个头文件包含所有的数据包的格式定义#ifndef _MessageHeader_hpp_#define _MessageHeader_hpp_ enum CMD{ CMD_LOGIN, CMD_LOGIN_RESULT, CMD_LOGOUT, CMD_LOGOUT_RESULT, CMD_NEW_USER_JOIN, CMD_原创 2021-07-01 19:40:09 · 114 阅读 · 0 评论 -
6.2---将服务端端封装为class
一、概述在前面的文章中,服务端的代码都是以面向过程的形式展现,本文将之前服务端的代码封装为一个class二、代码如下MessageHeader.hpp这个头文件包含所有的数据包的格式定义#ifndef _MessageHeader_hpp_#define _MessageHeader_hpp_ //消息的类型enum CMD{ CMD_LOGIN, //登录 CMD_LOGIN_RESULT, //登录结果 CMD_LOGOUT, //退出 CMD原创 2021-07-01 19:37:59 · 123 阅读 · 0 评论 -
5.2---将服务端代码进行跨平台移植(Windows、Unix)
一、跨平台移植概述前面的文章我们的代码都是在Windows下进行编译运行的,现在我们需要将代码移动到Linux和Mac OS操作系统上进行运行因为Linux和Mac OS底层都是使用Unix内核,因此将代码修改之后,在Linux和Mac OS上面都可以进行编译并运行,不需要单独设计两份二、代码修订代码修订1头文件修订:Windows与Unix下套接字使用的头文件不同,因此需要修订一些常量定义:Windows下有SOCKET、、INVALID_SOCKET、SOCKET_ERROR等宏的定义,但是原创 2021-07-01 19:35:49 · 441 阅读 · 0 评论 -
5.1---将客户端代码进行跨平台移植(Windows、Unix)
一、跨平台移植概述前面的文章我们的代码都是在Windows下进行编译运行的,现在我们修改代码,使其在Windows、Ubuntu、Mac OS系统上都可以运行因为Linux和Mac OS底层都是使用Unix内核,因此将代码修改之后,在Linux和Mac OS上面都可以进行编译并运行,不需要单独设计两份二、代码修订代码修订1头文件修订:Windows与Unix下套接字使用的头文件不同,因此需要修订一些常量定义:Windows下有SOCKET、、INVALID_SOCKET、SOCKET_ERROR原创 2021-07-01 19:29:17 · 551 阅读 · 0 评论 -
4---为客户端添加输入线程
一、为客户端添加输入线程在前一篇文章中我们的客户端不能手动的在命令行中输入命令发送给服务端,而是简单地书写了一小段代码,然后发送给服务端此处我们为客户端添加一个线程,此处采用的是C++11中的线程对象std::thread二、代码设计思路设计了一个全局变量g_bRun代表当前客户端正在运行,main函数主循环while中使用g_bRun在主循环while之前设计创建一个C++11线程对象,线程运行函数名为cmdThread(),函数参数为客户端的socket。并且该线程分离出了主线程(为什么要分离原创 2021-07-01 19:23:01 · 139 阅读 · 0 评论 -
2---封装网络数据报
一、为什么设计网络数据报在消息交互时使用字符串不安全,且比较麻烦不好处理二、本文案例中用到的数据报格式本文的案例为:客户端可以输入login来登录服务端,或者输入logout来退出服务端服务端根据客户端传来的数据,做相应的回复消息类型枚举//消息的类型enum CMD{ CMD_LOGIN, //登录 CMD_LOGIN_RESULT, //登录结果 CMD_LOGOUT, //退出 CMD_LOGOUT_RESULT, //退出结果 CMD_E原创 2021-07-01 19:07:04 · 116 阅读 · 0 评论 -
3---将服务端、客户端升级为select模型
一、Windows下的selectWindows下的select函数与Unix下的select函数语法相同,但是有些语言稍有不同Unix下的select函数其参数1为操作的最大描述符的值加1。但是Windows下的select函数的第一个参数可以填最大的文件描述符加1,也可以默认填0(其参数1只是为了兼容而已)另外,Windows下的fd_set数据类型定义如下,其两个成员变量可以进行调用(但是Unix下的fd_set不提供),含义如下:fd_count:当前fd_set集合中存放的描述符的数量f原创 2021-07-01 19:18:55 · 160 阅读 · 0 评论 -
1---Windows下Tcp Socket的基本结构(客户端、服务端)(转载)
1.服务端#define WIN32_LEAN_AND_MEAN#define _WINSOCK_DEPRECATED_NO_WARNINGS //for inet_pton() #include <windows.h>#include <WinSock2.h>#include <iostream> #pragma comment(lib, "ws2_32.lib") using namespace std; int main(){ WORD.原创 2021-07-01 17:25:55 · 203 阅读 · 0 评论