系列博客参考:http://blog.csdn.net/zy416548283/article/category/1108400
代码以编号对应放在Github上:https://github.com/zy416548283/networkProgramming
题目
要求是一个国外大学的课程设计:https://www.cs.uoregon.edu/Classes/15F/cis432/ 这里的Assignment–Programming project #1 简单翻译一下题目的要求,具体要求可以参考原文中的要求
使用udp socket编写一个聊天室,要求具备以下功能
* 每个客户端可以加入多个聊天室(channel);
* 启动客户端的时候 默认加入Common这个聊天室;
* /join ChannelName 是加入聊天室,如果聊天室不存在,就创建这个聊天室;
* /leave ChannelName 是退出聊天室
* /switch ChannelName是切换聊天室
* /list 列出当前存在的聊天室
* /who Channel 列出指定聊天室有的成员
* 不加”/”表示用户在当前聊天室的聊天内容
题目解读
- 会使用前面学过的基础Linux下的socket基础api;
- 报文的格式,题目中已经定义好了;
- 会用到select、多线程之类的高级特性;
- 可以使用STL里的一些数据结构,开发速度更快
关于实现
课程设计中也给出了通信用的关键数据结构,如下所示:
#ifndef DUCKCHAT_H
#define DUCKCHAT_H
/* Path names to unix domain sockets should not be longer than this */
#ifndef UNIX_PATH_MAX
#define UNIX_PATH_MAX 108
#endif
/* This tells gcc to "pack" the structure. Normally, gcc will
* inserting p