@附加完善前的博文:
c++ Socket实现客户端与服务器数据传输 - 旧版 @以下是完善后的版本,基于旧版修改:
文章目录
- 前言
- 实现计划
- 具体实现
前言
网络通讯的重要基础之一,直接使用 Socket 进行编程可以体现在 c++、Python 等项目中,一般使用的是对 Socket 封装又再次封装好的框架和库,项目追求性能和效率可直接使用 Socket 实现网络编程,扩展性好,可自由发挥。
实现计划
本次完善原则是:遵循渐进,由浅入深,便于初步理解和使用。【序号对应下面的 - 代码编号】
1、先编写服务器:
个人理解,先有服务器,才有客户端;服务器部署完成并启动,客户端向服务器发起响应,数据才会被服务器处理或者客户端才能收到服务器的响应,无论成功还是失败。如果要回到先有鸡还是先有蛋
这个话题进行讨论那就无趣了。 年轻人不讲武德,耗子尾汁!
本次编写目标:实现单向接受客户端数据即可
2、再编写客户端
客户端从最基础的 Socket 编程开始。
本次编写目标:实现单向发送数据给服务器即可
3、服务器接受多客户端数据
本次编写目标:多个客户端向服务器发送数据,服务器能够正确接受数据
4、服务器响应客户端请求(命令式)
命令式:我对它的定义就是,客户端向服务器发送一条服务器预先设定的命令 ,服务器收到此命令进行字符串匹配,匹配之后执行相应的代码。
本次编写目标:实现命令式执行服务器代码,相应不同效果
5、简单文字群聊
服务器作为数据或消息的中转站,收集所有的数据或消息,中转站没接受到一份数据,则把该数据转发给处自己之外的其他每一个人,实现群聊效果。
本次编写目标:服务器实现文字群发
6、简单文字私聊
在群聊的基础上实现私聊。首先服务器还是作为一个中转站,保存所有链接到该服务器的用户及其信息,每当服务器加入一个客户端,服务器发送一份 所有在线用户的信息 给该客户端,客户端上展示所有的用户信息;实现私聊的一个要点是如何保证服务器正确转发消息给特定的私聊用户,对于简单的个人实现思路,暂时考虑使用唯一标识符 token 标识每一位用户的身份。
本次编写目标:文字私聊
7、I/O 模型优化代码性能 - Select 模型
I/O 网络编程模型,主要分为阻塞模型和非阻塞模型,阻塞 —— 代码按顺序执行,上一层的代码未执行完成,下层代码只能等待上层代码执行完成才开始执行自身,非阻塞 —— 代码的执行可以是异步进行,有一件事情正在做但还没做完,可以开始做另一件新的事情,常常伴随着异步回调。
本次编写目标:select 轮训模式
8、I/O 模型优化代码性能 - Poll 模型
本次编写目标:poll 内核优化后的轮训模式
9、I/O 模型优化代码性能 - EPoll 模型
本次编写目标:epoll 高性能的消息轮训模式
10、简单图片传输
本次编写目标:基于群聊、私聊的基础上实现图片传输
11、待更新
具体实现
【代码编号 - 1】
【代码编号 - 2】
【代码编号 - 3】
【代码编号 - 4】
【代码编号 - 5】
【代码编号 - 6】
【代码编号 - 7】
【代码编号 - 8】
【代码编号 -9】
【代码编号 - 10】
最后,抒发一下计划编写本文的动力来源:
很久之前就有实现这么一个计划的想法,不知不觉被耽搁了,可能大多数源于人性的懒惰;计划每个人都可拥有,若最终不曾尝试实现(即使是失败),那曾经美好的计划就是日后溃烂的回忆;两袖清风,不在少年,你不曾努力,怎么给未来的自己一个交代。
———— 摘自《村长 - 回忆录》