C++面象课程设计报告
院(系): 计算机工程学院
专业: 软件工程
学生姓名: __
班级:__软件 学号:
题目: _局域网聊天程序________
起迄日期: _2012618~2012629
设计点: 计算机学院机房
指 导 教 师:
完成日期 2012 年X月 X日
课程设计报告容(供参考)
需求分析前数字信息时代网络时代种编辑工具忽视网络应着Internet 普宽带技术成熟越越户进入网络世界中享浏览新闻查询信息发送邮件线观电影等服务享受网络带便利办公高效时新型Web应程序网民间提供实时通信功场聊天室
网络早期开始盛行BBSIRC 类似网聊天室机制聊天室网友提供实时性话渠道网络极流行项服务
聊天室适网会议闲聊场合聊天室网友提供较交友环境网友间相互文字交谈形式点类似笔友性质节省书信返时间网交友热门原
聊天室设计目标
课题建立聊天通信模型设计聊天室软件包括服务器端客户端功:
服务器端功:
1 初始化socket 创建服务器端
2 维护链表保存户IP址端口信息
3 接受户传送聊天信息然链表中户转发
4 接受户传送连接判断命令户发出响应命令
1.
二 设计容
SOCKET连接程
根连接启动方式套接字连接目标套接字间连接程分三步骤:服务器监听客户端请求连接确认 服务器监听:服务器端套接字定位具体客户端套接字处等连接状态实时监控网络状态 客户端请求:指客户端套接字提出连接请求连接目标服务器端套接字客户端套接字必须首先描述连接服务器套接字指出服务器端套接字址端口号然服务器端套接字提出连接请求 连接确认:指服务器端套接字监听者说接收客户端套接字连接请求响应客户端套接字请求建立新线程服务器端套接字描述发客户端旦客户端确认描述连接建立服务器端套接字继续处监听状态继续接收客户端套接字连接请求
开发ServerClient模型程序
开发原理: 服务器ServerSocket监听指定端口端口意指定(1024端口通常属保留端口操作系统中意建议1024端口)等客户连接请求客户连接会话产生完成会话关闭连接 客户端Socket网络某服务器某端口发出连接请求旦连接成功开会话会话完成关闭Socket客户端需指定开端口通常时动态分配1024端口 Socket接口TCPIP网络APISocket接口定义许函数例程程序员开发TCPIP网络应程序学InternetTCPIP网络编程必须理解Socket接口Socket接口设计者先接口放Unix操作系统里面果解Unix系统输入输出话容易解Socket网络Socket数传输种特殊IOSocket种文件描述符Socket具类似开文件函数调Socket()该函数返回整型Socket描述符连接建立数传输等操作通该Socket实现
显示编辑框
IP
端口:
名字
发送编辑框
建立连接钮
断开连接
端口:
建立服务器
关闭服务器
发送
清空
退出
运行聊天程序
建立服务器
台电脑运行聊天程序
输入服务器IP址端口号
(输入名字)建立连接
提示连接成功(失败)
进行聊天
清聊天容
显示机IP建立连接址端口
提示xxx连接成功
进行聊天
清聊天容
关闭服务器
提示X户正连接否断开
退出
断开连接
退出
1.
2. 编写程序代码
客户端类:
class CClientSocket public CSocket
{
Attributes
private
UINT m_nTimerID
CChatDlg* m_pDlg
Operations
public
CClientSocket(CChatDlg* pDlg)
virtual ~CClientSocket()
Overrides
public
BOOL SetTimeOut(UINT uTimeOut)
BOOL KillTimeOut()
ClassWizard generated virtual function overrides
{{AFX_VIRTUAL(CClientSocket)
public
virtual void OnReceive(int nErrorCode)
virtual void OnClose(int nErrorCode)
virtual BOOL OnMessagePending()
void CClientSocketOnReceive(int nErrorCode)
{
TODO Add your specialized code here andor call the base class
char buffer[BufferSize]
Receive(buffer sizeof(buffer))
m_pDlg>ShowText(CString(buffer))
CSocketOnReceive(nErrorCode)
}
void CClientSocketOnClose(int nErrorCode)
{
TODO Add your specialized code here andor call the base class
PostMessage(m_pDlg>m_hWnd WM_CLIENT_CLOSE 0 0)
CSocketOnClose(nErrorCode)
}
BOOL CClientSocketOnMessagePending()
{
TODO Add your specialized code here andor call the base class
MSG msg
if (PeekMessage(&msg m_pDlg>m_hWnd WM_TIMER WM_TIMER PM_NOREMOVE))
{
if (msgwParam m_nTimerID)
{
PeekMessage(&msg m_pDlg>m_hWnd WM_TIMER WM_TIMER PM_REMOVE)
CancelBlockingCall()
return FALSE
}
}
return CSocketOnMessagePending()
}
BOOL CClientSocketSetTimeOut(UINT uTimeOut)
{
m_nTimerID SetTimer(m_pDlg>m_hWnd 1 uTimeOut NULL)
return m_nTimerID
}
BOOL CClientSocketKillTimeOut()
{
return KillTimer(m_pDlg>m_hWnd m_nTimerID)
}
CServerSocketCServerSocket(CChatDlg* pDlg)
{
m_pDlg pDlg
m_nMessageCount 0
}
CServerSocket~CServerSocket()
{
}
Do not edit the following lines which are needed by ClassWizard
#if 0
BEGIN_MESSAGE_MAP(CServerSocket CSocket)
{{AFX_MSG_MAP(CServerSocket)
}}AFX_MSG_MAP
END_MESSAGE_MAP()
#endif 0
CServerSocket member functions
服务器类
void CServerSocketOnReceive(int nErrorCode)
{
TODO Add your specialized code here andor call the base class
char buffer[BufferSize]
Receive(buffer sizeof(buffer))
if (m_nMessageCount 0)
{
CString str(buffer)
m_ClientName str
str + 线
m_pDlg>ShowText(str)
for (int i 0 i < m_pDlg>m_ServerSocketsize() i++)
{
if (m_pDlg>m_ServerSocket[i] this)
{
m_pDlg>m_ServerSocket[i]>Send(str strGetLength() + 1)
}
}
}
else
{
CString str
str m_ClientName + 说 + buffer
m_pDlg>ShowText(str)
for (int i 0 i < m_pDlg>m_ServerSocketsize() i++)
{
if (m_pDlg>m_ServerSocket[i] this)
{
m_pDlg>m_ServerSocket[i]>Send(str strGetLength() + 1)
}
}
}
m_nMessageCount++
CSocketOnReceive(nErrorCode)
}
void CServerSocketOnClose(int nErrorCode)
{
TODO Add your specialized code here andor call the base class
CString str(m_ClientName)
str + 离线
m_pDlg>ShowText(str)
for (int i 0 i < m_pDlg>m_ServerSocketsize() i++)
{
if (m_pDlg>m_ServerSocket[i] this)
{
m_pDlg>m_ServerSocket[i]>Send(str strGetLength() + 1)
}
else
{
m_pDlg>PostMessage(WM_CLIENT_CLOSE i 0)
}
}
CSocketOnClose(nErrorCode)
}
建立服务器
连接服务器
进行聊天:
三 设计总结(谈谈次课程设计验体会)
通毕业设计开发学软件开发新理解增加开发力深刻理解团队合作精神次开发仅学 C++数结构sqlwinsock技术网络编程进行深入学总结出网络编程特点开发提供参考感谢老师细心指导时感谢学宝贵建议
四 参考文献
[1] David J KruglinskiProgramming Visual C++1998
[2] 施炜李铮秦颍Windows Sockets 规范应—Windows网络编程接口
1996
[3]Anthony Jones and Jim OhlumdTCPIP详解 卷:协议(英文版)
机械工业出版社2003
[4] 王罡 林立志 基WindowsTCPIP编程清华学出版社2002
[5] 蒋东兴等Windows Sockets 网络程序设计全 清华学出版社1999
五 附录
函数变量名
注释
CAboutDlg
关话框类
CChatApp
应程序运行基础
CChatDlg
窗口
ONSEND
发送消息
ContentClient
连接服务器判断否连接服务器
ONCLEAR
清聊天记录
DoDataExchange
数改变改变列表中信息显示更新列表中信息
ONCONNECT
连接服务器
ONCANCEL
退出
Oncielentclose
关闭客户端
OnCloseLink
断开已建立连接友连接
OnCtlColor
控件颜色处理提示信息颜色改变
OnInitDialog
界面进行初始化
ONSERVERCREATE
建立服务器
OnPaint
绘制界面窗口
OnserverClose
关闭服务器
OnSaveChatCont
保存聊天信息文件
青岛理工学课程设计
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档