/Instant-messaging-system

本项目使用C++实现一个具备服务器端和客户端即时通信且具有私聊功能的聊天室

Primary LanguageC++

Instant-messaging-system

本项目使用C++实现一个具备服务器端和客户端即时通信且具有私聊功能的聊天室

一:项目内容

本项目使用C++实现一个具备服务器端和客户端即时通信且具有私聊功能的聊天室。

目的是学习C++网络开发的基本概念,同时也可以熟悉下Linux下的C++程序编译和简单MakeFile编写

二:需求分析

这个聊天室主要有两个程序:

1.服务端:能够接受新的客户连接,并将每个客户端发来的信息,广播给对应的目标客户端。

2.客户端:能够连接服务器,并向服务器发送消息,同时可以接收服务器发来的消息。

即最简单的C/S模型。

三:抽象与细化

服务端类需要支持:

1.支持多个客户端接入,实现聊天室基本功能。

2.启动服务,建立监听端口等待客户端连接。

3.使用epoll机制实现并发,增加效率。

4.客户端连接时,发送欢迎消息,并存储连接记录。

5.客户端发送消息时,根据消息类型,广播给所有用户(群聊)或者指定用户(私聊)。

6.客户端请求退出时,对相应连接信息进行清理。

客户端类需要支持:

1.连接服务器。

2.支持用户输入消息,发送给服务端。

3.接受并显示服务端发来的消息。

4.退出连接。

涉及两个事情,一个写,一个读。所以客户端需要两个进程分别支持以下功能。

子进程:

1.等待用户输入信息。

2.将聊天信息写入管道(pipe),并发送给父进程。

父进程:

1.使用epoll机制接受服务端发来的消息,并显示给用户,使用户看到其他用户的信息。

2.将子进程发送的聊天信息从管道(pipe)中读取出来,并发送给客户端。

四:C/S模型

TCP服务端通信常规步骤:                                                                                                    

1.socket()创建TCP套接字                                                                              

2.bind()将创建的套接字绑定到一个本地地址和端口上                                        

3.listen(),将套接字设为监听模式,准备接受客户请求                                        

4.accept()等用户请求到来时接受,返回一个对应此连接新套接字   

5.用accept()返回的套接字和客户端进行通信,recv()/send() 接受/发送信息。                               

6.返回,等待另一个客户请求。

7.关闭套接字

TCP客户端通信常规步骤:

1.socket()创建TCP套接字。

2.connect()建立到达服务器的连接。

3.与客户端进行通信,recv()/send()接受/发送信息,write()/read() 子进程写入管道,父进程从管道中读取信息然后send给客户端

  1. close() 关闭客户连接。