loop_in_codes

低调做技术__欢迎移步我的独立博客 codemaro.com 微博 kevinlynx

写了个简单的聊天服务器

没什么技术含量,将select模型做简单的封装,同时提供服务器端和客户端所用的接口。功能实现上对数据的发送和接收
都做了缓存,搞得跟异步IO一样 = =#。

这个例子聊天服务器可以使用telnet登录,服务器直接将telnet发来的字符串转发给所有客户端。我稍微写了一个小的网络
模块,可以用于以后写网络程序的例子代码,也算是练习下网络库的设计。

系统总体类图如下:

classdiagram

Address用于包装sockaddr_in结构体,目的就是让系统用起来更方便。

Buffer用于封装原始内存,主要目的是拿来做发送、接收数据缓冲。

Fdset差不多和FD_SET一样,只是这里自己写一个FD_SET,可以让连接数不受FD_SETSIZE的限制。

Socket封装了基本的SOCKET操作,包括创建、销毁套接字。

Session比较有意思,按我的意思,就是代表一个网络连接。对于服务器端,可能会有很多连接,每一个连接可以用一个
Session对象表示。而对于客户端,只有一个连接,那么就是一个Session对象。对于Session对象来说,可以进行数据的
发送和接收,因此这里Session有recv、send之类的接口。为了缓冲数据,所以Session对于读写分别有一个Buffer对象。

Server代表一个服务器,直接提供创建服务器的接口。同时使用一个unsigned long作为每一个连接的ID号。

Client代表一个客户端,可以直接用于连接服务器。

下载文件提供网络模块代码,以及三个例子程序。点击下载

posted on 2008-05-28 17:13 Kevin Lynx 阅读(3998) 评论(4)  编辑 收藏 引用 所属分类: network

评论

# re: 写了个简单的聊天服务器 2008-05-28 17:37 jigloo

比较简陋。
应该分两层。 网络层用reactor模式封装异步IO
逻辑层用factory模式,Connection中放聊天协议的实现,Transport分装socket操作。
这才是正统的做法。  回复  更多评论   

# re: 写了个简单的聊天服务器 2008-05-29 20:29 骑白马的唐僧

用C++写的,好有才哦,羡慕中!!!!!  回复  更多评论   

# re: 写了个简单的聊天服务器 2008-05-30 09:30 关中刀客

还是需要很多改进的,比如内存管理  回复  更多评论   

# re: 写了个简单的聊天服务器 2008-06-06 10:59 Kevin Lynx

@jigloo
"网络层用reactor模式封装异步IO" 似乎proactor才是用于封装异步IO的吧?

关于你提出的这几层封装,不知道是否可以提供个简单的整体类图?不甚感激。  回复  更多评论   


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理