SlideShare a Scribd company logo
Linux 平台聊天软件
高磊
gaolei.ei@gmail.com
Gao Lei @ ITEC Lab2
Agenda
需求与构架分析
设计实现
试用、Bug及维护
libjingle与jabber协议库
Gao Lei @ ITEC Lab3
需求
开发一个linux平台下的聊天软件:
基本功能及要求:
(1) 开发语言为C或C++
(2) 需要有Makefile
(3) 两台机器间能够进行异步文字聊天
(4) 提交一份设计文档,要求有工作流程图
扩展功能:
(1) 增加一个服务器,能够对用户管理以及认证,聊天内容通过服务
器转发
(2) 在服务器端或用户端能够保存聊天内容,并实现查看历史记录
功能
Gao Lei @ ITEC Lab4
架构
典型的C/S架构
DatabaseDatabase
Gao Lei @ ITEC Lab5
设计实现
C/C++权衡
Socket网络编程
Select()函数
Tinyxml库
Makefile
Gao Lei @ ITEC Lab6
Socket网络编程
Server Side:
socket()
bind()
listen()
accept()
Client Side:
socket()
connect()
send()
send()
recv()
recv()
xml流
xml流
Gao Lei @ ITEC Lab7
select()函数
处理异步 I/O 多路复用
程序会在select这里等待,直到超时(timeout),或
者被监视的文件句柄有某一个或多个发生了状态改变
,则select返回状态改变的那个fd
Gao Lei @ ITEC Lab8
TinyXml类库
小巧精干,可以很容易集成到其它程序中的C++
XML解析器
经过Tinyxml解析后生成一个可读写的文档对象模型
(DOM)
支持C++的STL
支持操作 operator<<:对一个c++流进行解析,方
便网络传输
Gao Lei @ ITEC Lab9
xml流
<stream>
<from>imleon</from>
<to>zhang</to>
<type>11</type>
<detail>This is a msg.</detail>
</stream>
<stream>
<from>imleon</from>
<to>server</to>
<type>1</type>
<detail>imleon</detail>
</stream>
Xml流示例——消息流(msg)
Xml流示例——登录流(login)
Type:指明xml流的类型
0: register ;注册
1: login ;登录
2: logout ;注销
3: talk ;开始聊天
4: bye ;结束聊天
5: buddy ;查看用户列表
6: whoami ;查看自己信息
7: quit ;退出程序
8: info ;服务器消息
9: history ;历史聊天记录
10: help ;帮助信息
11: msg ;聊天消息内容
Gao Lei @ ITEC Lab10
文件结构
Make编译
动态链接库
libtinyxml.so
tinyxml.h
服务器二进制文件
server
客户端二进制文件
client
Tinyxml类库
tinyxml_2_5_3.tar.gz
公共类
xmlStream.cpp
xmlStream.h
客户端
client.cpp
client.h
c.cpp
服务器端
server.cpp
server.h
s.cpp
其他文件
Global.h
Makefile
Passwd
History.log
Gao Lei @ ITEC Lab11
使用流程
用户指令:
/register newname ;注册新用户名newname
/login username ;用户username登录
/logout ;退出登录
/talk partnername ;开始与partnername聊天
/bye ;结束与partner的聊天
/buddy ;查看已注册用户和当前在线用户
/whoami ;查看自己用户名
/quit ;退出程序
/history ;查看本地聊天记录
/help ;查看帮助信息
Gao Lei @ ITEC Lab12
使用流程
./client 192.168.37.10 3334
(启动,连接服务器)
./client 192.168.37.10 3334
(启动,连接服务器)
/login imleon
(用户登录)
/login imleon
(用户登录)
/talk zhang
(与在线用户聊天)
/talk zhang
(与在线用户聊天)
This is a msg.
(向zhang发送消息)
This is a msg.
(向zhang发送消息)
/bye
(退出与zhang聊天)
/bye
(退出与zhang聊天)
/logout
(退出登录)
/logout
(退出登录)
/quit
(退出程序)
/quit
(退出程序)
/buddy
(查看已注册用户
和当前在线用户)
/buddy
(查看已注册用户
和当前在线用户)
/history
(查看历史聊天记录)
/history
(查看历史聊天记录)
/whoami
(查看自己用户名)
/whoami
(查看自己用户名)
/help
(查看帮助信息)
/help
(查看帮助信息)
/register Kate
(注册新用户)
/register Kate
(注册新用户)
Gao Lei @ ITEC Lab13
演示
已知问题及Bug:
用户界面不友好
history聊天记录的查看未完成
多个客户端用同一个账号登录问题
已注册用户,只能通过手动方法删除
Gao Lei @ ITEC Lab14
Jabber & XMPP 协议
Jabber是一个开放、标准的即时通讯系统,用于在Internet上的两个实体之间
交换基于XML Stream的结构化信息
IETF将Jabber定为即时通讯和现场技术的标准协议,称为XMPP(可扩展消息
处理现场协议),相关的规范是RFC3920和RFC3921
Jabber实现:
GTalk(基于libjingle类库)
Spark
Freetalk(基于Loudmouth类库)
Openfire(服务器端)
15
ThanksThanks
—————————
gaolei.ei@gmail.com

More Related Content

Viewers also liked

Wanita
WanitaWanita
Daniel Morgenstern Graphic Design Projects
Daniel Morgenstern Graphic Design ProjectsDaniel Morgenstern Graphic Design Projects
Daniel Morgenstern Graphic Design Projects
danielmorgenstern
 
Daniel Morgenstern Variety
Daniel Morgenstern VarietyDaniel Morgenstern Variety
Daniel Morgenstern Variety
danielmorgenstern
 
Daniel Morgenstern Profile
Daniel Morgenstern ProfileDaniel Morgenstern Profile
Daniel Morgenstern Profile
danielmorgenstern
 
Daniel Morgenstern Logo Presentation
Daniel Morgenstern Logo PresentationDaniel Morgenstern Logo Presentation
Daniel Morgenstern Logo Presentation
danielmorgenstern
 
New Digital Portraits
New Digital PortraitsNew Digital Portraits
New Digital Portraits
danielmorgenstern
 

Viewers also liked (8)

Wanita
WanitaWanita
Wanita
 
Daniel Morgenstern Graphic Design Projects
Daniel Morgenstern Graphic Design ProjectsDaniel Morgenstern Graphic Design Projects
Daniel Morgenstern Graphic Design Projects
 
Intro to rest
Intro to restIntro to rest
Intro to rest
 
Intro to REST
Intro to RESTIntro to REST
Intro to REST
 
Daniel Morgenstern Variety
Daniel Morgenstern VarietyDaniel Morgenstern Variety
Daniel Morgenstern Variety
 
Daniel Morgenstern Profile
Daniel Morgenstern ProfileDaniel Morgenstern Profile
Daniel Morgenstern Profile
 
Daniel Morgenstern Logo Presentation
Daniel Morgenstern Logo PresentationDaniel Morgenstern Logo Presentation
Daniel Morgenstern Logo Presentation
 
New Digital Portraits
New Digital PortraitsNew Digital Portraits
New Digital Portraits
 

Similar to GaoLei\'s Summer Intern Report.pdf

university_graduation.Ppt
university_graduation.Pptuniversity_graduation.Ppt
university_graduation.Pptdusong
 
Ch01
Ch01Ch01
Ch01
jashliao
 
C#语言与面向对象程序设计
C#语言与面向对象程序设计C#语言与面向对象程序设计
C#语言与面向对象程序设计WizRay
 
新浪微博大规模基于Docker的混合云应用实践 -王关胜
新浪微博大规模基于Docker的混合云应用实践 -王关胜新浪微博大规模基于Docker的混合云应用实践 -王关胜
新浪微博大规模基于Docker的混合云应用实践 -王关胜
Weibo Corporation
 
Software Engineer Talk
Software Engineer TalkSoftware Engineer Talk
Software Engineer Talk
Larry Cai
 
Build Your Own Android Toolchain from scratch
Build Your Own Android Toolchain from scratchBuild Your Own Android Toolchain from scratch
Build Your Own Android Toolchain from scratch
National Cheng Kung University
 
實踐 Clean Architecture(實作高可用性的軟件架構)
實踐 Clean Architecture(實作高可用性的軟件架構)實踐 Clean Architecture(實作高可用性的軟件架構)
實踐 Clean Architecture(實作高可用性的軟件架構)
Gelis Wu
 
Workflow engine
Workflow engineWorkflow engine
Workflow enginePokai Hsu
 
[DevOpsDays] 硬體產業的DevOps導入與實踐 - 以工控產業為例
[DevOpsDays] 硬體產業的DevOps導入與實踐 - 以工控產業為例[DevOpsDays] 硬體產業的DevOps導入與實踐 - 以工控產業為例
[DevOpsDays] 硬體產業的DevOps導入與實踐 - 以工控產業為例
TIM WANG
 
twMVC#36.NetCore 3快速看一波
twMVC#36.NetCore 3快速看一波twMVC#36.NetCore 3快速看一波
twMVC#36.NetCore 3快速看一波
twMVC
 
Docker + CI pipeline 的高效率 ChatBot 開發方法
Docker + CI pipeline 的高效率 ChatBot 開發方法Docker + CI pipeline 的高效率 ChatBot 開發方法
Docker + CI pipeline 的高效率 ChatBot 開發方法
Philip Zheng
 
FeatHub_GAIDC_2022.pptx
FeatHub_GAIDC_2022.pptxFeatHub_GAIDC_2022.pptx
FeatHub_GAIDC_2022.pptx
Dong Lin
 
云起龙骧系列课程(4) - Live Services开发实战_黄继佳
云起龙骧系列课程(4) - Live Services开发实战_黄继佳云起龙骧系列课程(4) - Live Services开发实战_黄继佳
云起龙骧系列课程(4) - Live Services开发实战_黄继佳
yalle
 
用Bluemix DevOps 建立良好的團隊開發與版本控制
用Bluemix DevOps 建立良好的團隊開發與版本控制用Bluemix DevOps 建立良好的團隊開發與版本控制
用Bluemix DevOps 建立良好的團隊開發與版本控制
Hsuan-Ju Lin
 
[NTU CSIE] Intro to Windows lab
[NTU CSIE] Intro to Windows lab[NTU CSIE] Intro to Windows lab
[NTU CSIE] Intro to Windows lab
Ming-Yuan Jian
 
Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境
Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境
Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境drewz lin
 
從技術找未來
從技術找未來從技術找未來
從技術找未來
Galaxy Software Services
 
deep inside Sina App Engine cloud service
deep inside Sina App Engine cloud servicedeep inside Sina App Engine cloud service
deep inside Sina App Engine cloud service
cong lei
 
Sae
SaeSae

Similar to GaoLei\'s Summer Intern Report.pdf (20)

university_graduation.Ppt
university_graduation.Pptuniversity_graduation.Ppt
university_graduation.Ppt
 
Ch01
Ch01Ch01
Ch01
 
C#语言与面向对象程序设计
C#语言与面向对象程序设计C#语言与面向对象程序设计
C#语言与面向对象程序设计
 
新浪微博大规模基于Docker的混合云应用实践 -王关胜
新浪微博大规模基于Docker的混合云应用实践 -王关胜新浪微博大规模基于Docker的混合云应用实践 -王关胜
新浪微博大规模基于Docker的混合云应用实践 -王关胜
 
Software Engineer Talk
Software Engineer TalkSoftware Engineer Talk
Software Engineer Talk
 
Build Your Own Android Toolchain from scratch
Build Your Own Android Toolchain from scratchBuild Your Own Android Toolchain from scratch
Build Your Own Android Toolchain from scratch
 
實踐 Clean Architecture(實作高可用性的軟件架構)
實踐 Clean Architecture(實作高可用性的軟件架構)實踐 Clean Architecture(實作高可用性的軟件架構)
實踐 Clean Architecture(實作高可用性的軟件架構)
 
Workflow engine
Workflow engineWorkflow engine
Workflow engine
 
[DevOpsDays] 硬體產業的DevOps導入與實踐 - 以工控產業為例
[DevOpsDays] 硬體產業的DevOps導入與實踐 - 以工控產業為例[DevOpsDays] 硬體產業的DevOps導入與實踐 - 以工控產業為例
[DevOpsDays] 硬體產業的DevOps導入與實踐 - 以工控產業為例
 
twMVC#36.NetCore 3快速看一波
twMVC#36.NetCore 3快速看一波twMVC#36.NetCore 3快速看一波
twMVC#36.NetCore 3快速看一波
 
Docker + CI pipeline 的高效率 ChatBot 開發方法
Docker + CI pipeline 的高效率 ChatBot 開發方法Docker + CI pipeline 的高效率 ChatBot 開發方法
Docker + CI pipeline 的高效率 ChatBot 開發方法
 
FeatHub_GAIDC_2022.pptx
FeatHub_GAIDC_2022.pptxFeatHub_GAIDC_2022.pptx
FeatHub_GAIDC_2022.pptx
 
云起龙骧系列课程(4) - Live Services开发实战_黄继佳
云起龙骧系列课程(4) - Live Services开发实战_黄继佳云起龙骧系列课程(4) - Live Services开发实战_黄继佳
云起龙骧系列课程(4) - Live Services开发实战_黄继佳
 
用Bluemix DevOps 建立良好的團隊開發與版本控制
用Bluemix DevOps 建立良好的團隊開發與版本控制用Bluemix DevOps 建立良好的團隊開發與版本控制
用Bluemix DevOps 建立良好的團隊開發與版本控制
 
[NTU CSIE] Intro to Windows lab
[NTU CSIE] Intro to Windows lab[NTU CSIE] Intro to Windows lab
[NTU CSIE] Intro to Windows lab
 
Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境
Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境
Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境
 
從技術找未來
從技術找未來從技術找未來
從技術找未來
 
deep inside Sina App Engine cloud service
deep inside Sina App Engine cloud servicedeep inside Sina App Engine cloud service
deep inside Sina App Engine cloud service
 
Sae
SaeSae
Sae
 
Jobforcompal
JobforcompalJobforcompal
Jobforcompal
 

GaoLei\'s Summer Intern Report.pdf

  • 2. Gao Lei @ ITEC Lab2 Agenda 需求与构架分析 设计实现 试用、Bug及维护 libjingle与jabber协议库
  • 3. Gao Lei @ ITEC Lab3 需求 开发一个linux平台下的聊天软件: 基本功能及要求: (1) 开发语言为C或C++ (2) 需要有Makefile (3) 两台机器间能够进行异步文字聊天 (4) 提交一份设计文档,要求有工作流程图 扩展功能: (1) 增加一个服务器,能够对用户管理以及认证,聊天内容通过服务 器转发 (2) 在服务器端或用户端能够保存聊天内容,并实现查看历史记录 功能
  • 4. Gao Lei @ ITEC Lab4 架构 典型的C/S架构 DatabaseDatabase
  • 5. Gao Lei @ ITEC Lab5 设计实现 C/C++权衡 Socket网络编程 Select()函数 Tinyxml库 Makefile
  • 6. Gao Lei @ ITEC Lab6 Socket网络编程 Server Side: socket() bind() listen() accept() Client Side: socket() connect() send() send() recv() recv() xml流 xml流
  • 7. Gao Lei @ ITEC Lab7 select()函数 处理异步 I/O 多路复用 程序会在select这里等待,直到超时(timeout),或 者被监视的文件句柄有某一个或多个发生了状态改变 ,则select返回状态改变的那个fd
  • 8. Gao Lei @ ITEC Lab8 TinyXml类库 小巧精干,可以很容易集成到其它程序中的C++ XML解析器 经过Tinyxml解析后生成一个可读写的文档对象模型 (DOM) 支持C++的STL 支持操作 operator<<:对一个c++流进行解析,方 便网络传输
  • 9. Gao Lei @ ITEC Lab9 xml流 <stream> <from>imleon</from> <to>zhang</to> <type>11</type> <detail>This is a msg.</detail> </stream> <stream> <from>imleon</from> <to>server</to> <type>1</type> <detail>imleon</detail> </stream> Xml流示例——消息流(msg) Xml流示例——登录流(login) Type:指明xml流的类型 0: register ;注册 1: login ;登录 2: logout ;注销 3: talk ;开始聊天 4: bye ;结束聊天 5: buddy ;查看用户列表 6: whoami ;查看自己信息 7: quit ;退出程序 8: info ;服务器消息 9: history ;历史聊天记录 10: help ;帮助信息 11: msg ;聊天消息内容
  • 10. Gao Lei @ ITEC Lab10 文件结构 Make编译 动态链接库 libtinyxml.so tinyxml.h 服务器二进制文件 server 客户端二进制文件 client Tinyxml类库 tinyxml_2_5_3.tar.gz 公共类 xmlStream.cpp xmlStream.h 客户端 client.cpp client.h c.cpp 服务器端 server.cpp server.h s.cpp 其他文件 Global.h Makefile Passwd History.log
  • 11. Gao Lei @ ITEC Lab11 使用流程 用户指令: /register newname ;注册新用户名newname /login username ;用户username登录 /logout ;退出登录 /talk partnername ;开始与partnername聊天 /bye ;结束与partner的聊天 /buddy ;查看已注册用户和当前在线用户 /whoami ;查看自己用户名 /quit ;退出程序 /history ;查看本地聊天记录 /help ;查看帮助信息
  • 12. Gao Lei @ ITEC Lab12 使用流程 ./client 192.168.37.10 3334 (启动,连接服务器) ./client 192.168.37.10 3334 (启动,连接服务器) /login imleon (用户登录) /login imleon (用户登录) /talk zhang (与在线用户聊天) /talk zhang (与在线用户聊天) This is a msg. (向zhang发送消息) This is a msg. (向zhang发送消息) /bye (退出与zhang聊天) /bye (退出与zhang聊天) /logout (退出登录) /logout (退出登录) /quit (退出程序) /quit (退出程序) /buddy (查看已注册用户 和当前在线用户) /buddy (查看已注册用户 和当前在线用户) /history (查看历史聊天记录) /history (查看历史聊天记录) /whoami (查看自己用户名) /whoami (查看自己用户名) /help (查看帮助信息) /help (查看帮助信息) /register Kate (注册新用户) /register Kate (注册新用户)
  • 13. Gao Lei @ ITEC Lab13 演示 已知问题及Bug: 用户界面不友好 history聊天记录的查看未完成 多个客户端用同一个账号登录问题 已注册用户,只能通过手动方法删除
  • 14. Gao Lei @ ITEC Lab14 Jabber & XMPP 协议 Jabber是一个开放、标准的即时通讯系统,用于在Internet上的两个实体之间 交换基于XML Stream的结构化信息 IETF将Jabber定为即时通讯和现场技术的标准协议,称为XMPP(可扩展消息 处理现场协议),相关的规范是RFC3920和RFC3921 Jabber实现: GTalk(基于libjingle类库) Spark Freetalk(基于Loudmouth类库) Openfire(服务器端)