思路:
网络聊天室
架构:C/S 架构(服务器和客户端架构)还有B/S架构,网页通信。
至少两个文件:client.c server.c

第一步:实现连接:客户端与服务器
网络通信(TCP/IP协议):(网络通信在这个项目中只用到了网络通信的底层架构:代码基本不变)
socket套接字连接,分两块
server.c :socket函数(用于创建套接字)
bind函数:绑定本地的接口和ip地址
listen函数:监听函数,监听端口套接字
accept函数:进行客户端的连接(阻塞型函数)
client.c:socket函数
bind函数
connect函数(尝试连接)
两者可以建立连接

第二步:进行登陆注册的操作
先进行客户端的操作,登录注册操作(这里客户注册的信息要放在数据库中,数据库是在服务器端,也就是说需要将用户注册的id,name等信息通过网络传给服务器,放在服务器的数据库中,在客户进行登录操作时,需要与服务器建立连接,查找数据库实现登录操作)这里要用到read 和write函数 ,客户端要给服务器发送消息。用write函数
write(cfd,s,strlen()) ccfd:(套接口)文件描述符 s:发送的消息的字符串指针 strlen():发送消息的长度。这里需要发送不止一个信息,有昵称,密码,账号等,不能连续写几个write或者read,这样连续发,连续读,可能会出现连包的现象(后面数据发送快,连上前面的消息,导致消息错误,所以 wirte和read函数发一次读一次,不可以出现连续发,连续读)

第三步:操作服务器
用的是大并发服务器,就是一个服务器可以同时和多个客户端连接。
accept函数每连接一个客户端就会执行一个客户端,这里要使用线程,就是在accept函数连接一个客户端之后,创建一个线程(pthread_create(pid,NULL,NULL,cfd))第三个参数可以是回调函数,就是说一个客户端就是一个线程。accept函数是阻塞型函数,当连接完一个客户端后,accept函数就阻塞在那里,等待下一个客户端来连接,然后再进行线程的创建。这样就实现了多用户同时登录的效果。
当一个用户登录之后,服务器在数据库中进行比对,如果在服务器中找到对应的用户,那么就可以给客户端返回一个标志位,这里我们要注意,客户端与服务器之间传递的是结构体,结构体里面存放的都是相关信息,当程序执行到这里需要在结构体里添加一个标志位,将这个标志位通过结构体传递给客户端,客户端接收之后,根据这个标志位来判断,是否登陆成功。登录成功就进入聊天界面,如果失败则返回登录界面。

第四步:
进入聊天界面,这里就可以选择性的去执行各项功能,scanf输入,但是要注意scanf 是阻塞型函数,每次执行完会阻塞在那里,这时如果有人给我发消息我是接收不到的,因为scanf阻塞在那里了,这里就要用到读写分离了,一个只给服务器写,另一个只读服务器。

以上网络通信+并发服务器客户端架构完成。

私聊:是通过链表来实现,每次私聊就去检索这个链表,每个结点会有,客户端的套接字文件描述符。
群聊:遍历链表
私聊群聊可以设置标志位,来判断。

管理员:可以用flag来实现是管理员登录还是普通用户登录。
踢人:就是将用户与服务器断开连接强制下线。
禁言:可以设置标志位,给用户禁言
聊天记录保存:就是用数据库来存,多一张表。
文件传输:因为read和write都是数据流不是文件,所以文件传送是需要打开文件,再读取数据,发送数据,接收数据,创建文件,写入数据。

线程池:提高服务器的安全性,节省资源。
心跳检测:查看长时间不操作,看看客户端是否还连接

网络聊天室整体思路框架相关推荐

  1. 【网络聊天室】——基于socket编程的TCP/UDP网络聊天服务器

    早期网络刚刚普及的时候,给人们印象最深的就是上网聊天,虽然作为一名上世纪的尾巴刚刚出生的我没有经历过,但仍从有所耳闻,那个时期是网络聊天室风靡的年代,全国知名聊天室大家都争破头的想要进去,基于如上和一 ...

  2. Linux C/TCP多线程网络聊天室

    多线程TCP网络聊天室 我们都知道TCP是一种基于连接的传输协议,使用多线程来实现其实步骤很简单. 首先说明一下项目:服务端开启后,直接运行客户端可以加入聊天室,同时其他客户端可以接收到某某客户端进入 ...

  3. 基于Socket通信的在线网络聊天室

    文章目录 项目结构 client constans entity util IO server ui other 大致思路 演示 时间:2021/4/20 开发环境: jdk1.8 编译器:idea2 ...

  4. 视频教程-网络聊天室Java基础版(Socket_Swing编程)仿QQ聊天-Java

    网络聊天室Java基础版(Socket_Swing编程)仿QQ聊天 IT行业资深从业者,7年资深Java高级开发,Java架构师.曾就职银行.电信等行业多家上市公司.担任项目负责人,软件架构师.有丰富 ...

  5. java_OA管理系统(一):Servlet总结案例仿网络聊天室

    因为我们学校的软件联盟要为我们校区开发一个OA系统,为此我将其所需要的一些技术进行汇总,以便web组组员开发所用. 第一篇是关于Servlet的一个汇总案例,算是开个简单的小头. 一.总述 代码来源于 ...

  6. zynqNet整体思路框架

    zynqNet整体思路框架 ZynqNet CNN Accelerator: Schedule 分析FPGA端顶层函数 P_TOP_SETUP P_setLayerConfigs 算法 ZynqNet ...

  7. 网络聊天室的技术与发展

    网络聊天室的技术与发展 摘要: 此文讲述了视频聊天网站相关的技术.发展过程.从客户那里了解到了很多的视频聊天相关的需求,经过自己长时间对视频聊天网站运营模式.盈利模式.系统架构以及相关技术的研究,写下 ...

  8. 仿微信的网络聊天室项目开发【完整源码讲解】

    目录 总体开发思路 服务器端 服务器界面设计 建立TCP服务器端通信 建立服务器消息发送输出流 建立服务器消息接收输入流 建立服务器实时消息通信线程 设置服务器通信自由断开 客户端 客户端界面设计 建 ...

  9. 【基于UDP的网络聊天室】

    总结下近期写的小项目,在学习中同时积累解决问题的经验,以及真正的项目中解决问题的思路,如有不合理地方,请多指教! 一.项目名称 基于UDP的网络聊天室 二.功能 1.当有新用户登录时,其他在线用户可以 ...

最新文章

  1. 4-1 ADO.NET简介
  2. 记录一次自己调试代码的过程
  3. Python源码学习:Python类机制分析
  4. VScode 乱装插件环境破坏踩坑自我反思总结
  5. python中json模块_Python使用内置json模块解析json格式数据的方法
  6. 增强QQ空间的统计功能
  7. redis设置开机自启动
  8. SAP UI5 应用开发教程之六十二 - 基于 OData V4 的 SAP UI5 表格控件使用方法介绍
  9. Tidb集群加mysql_TiDB - 快速入门,集群搭建
  10. 【Java】身份证的验证
  11. javascript 自动完成下拉框
  12. python批量转换数据类型_玩转python 各种数据类型的转换
  13. 查看工作日志Linux,工作日志,Linux的表现还是不错的
  14. SP1812 LCS2 - Longest Common Substring II
  15. 在proteus中共阴数码管的驱动与使用
  16. 心动的本质是什么_喜欢上一个人的本质是什么?
  17. 手把手教用爬虫爬sciencedirect学术研究
  18. OpenLayers应用一(转自http://www.cnblogs.com/lzlynn/)
  19. h5调用Android、ios的方法
  20. 用Python实现原生爬取某牙直播平台数据

热门文章

  1. 电脑桌面计算机怎么设置,示例win7电脑桌面图片怎么设置
  2. 【ucharts】超详细介绍使用ucharts图表
  3. 天龙网游入师门拿福利 师门系统讲解
  4. 12大城市Java平均薪资对比,北上深杭月薪过万,广州最意外
  5. 持续加码娱乐化零售,“真快乐”APP驶入“快车道”
  6. 量子位「MEET 2021智能未来大会」启动,邀智能科技企业共探明日行业新格局-1
  7. 多行显示和单行显示溢出部分为...
  8. 7-10 高空坠球 (20 分) 皮球从某给定高度自由落下,触地后反弹到原高度的一半,再落下,再反弹,……,如此反复。问皮球在第n次落地时,在空中一共经过多少距离?第n次反弹的高度是多少?
  9. 3dmax2019删除不想要的模型部分
  10. 【快应用】小程序转快应用如何退出整个快应用