- 5
- 0
- 约3.16千字
- 约 9页
- 2017-01-02 发布于贵州
- 举报
基于对话框的聊天程序
实验目的:
通过对网络编程的学习,设计一个基于对话框的聊天程序,实现发送与接收,完成了由接受知识到掌握技能的转化。本课程设计为学生提供了一个既动手又动脑,自学、查资料、独立实践的机会。将本学期课本上的理论知识和实际有机的结合起来,锻炼学生实际分析问题和解决问题的能力,提高学生适应实际、实践编程的能力,使对C++系统编程有了更加深刻的了解。
实验内容:
本课程设计主要解决客户端与服务器端的信息交换。 此程序主要分为两个部分:服务器端和客户端。服务器端用于提供一个网络端口,等待客户端发出请求,登录到此服务器端,然后进行网络通迅。客户端可通过服务器端的端口发送连接请求,然后登录聊天室。启动服务器聊天程序。这时聊天服务器需要指定一个端口号,客户端则根据这个端口号以及服务器的网络地址进行通信。通过分析,该程序完全可以在VisualC++中MFC完成
三、
设计要求:
采用客户端/服务器模式,分为客户端与服务器端程序
功能要求:
客户端能够与服务器连接,客户端能够发送信息,服务器端能够接收信息。
主要功能描述:
这个聊天室应用程序是基于客户端/服务器端模型的,一个服务器只能支持一个客户,因此它实际上是一个基于“点对点”模型的应用程序。通过这个应用程序,用户可以在两台计算机之间进行字符串传输—即可以为两个人进行网上聊天提供服务,而且两个人的传输的字符串被保留在程序的列表框中,并且进行分类,分为传送和接收的字符串。
实验流程:
首先利用对话框建立聊天程序的界面:如
最上面是一个接受数据的编辑框,下面分别是一个地址和发送数据的编辑框,左下角是发送数据的按钮。
AfxSocketInit()加载套接字库。需要注意的是这个函数要在程序的初始化函数中调用,即在Appliacation的InitInstance()中调用AfxSocketInit()
3.初始化套接字。在中添加一个成员函数InitSock(),用来初始化套接字,BOOL CBDlg::InitSocket()
{
m_socket=socket(AF_INET,SOCK_DGRAM,0);
if(INVALID_SOCKET==m_socket)
{
return FALSE;
}
SOCKADDR_IN addrSock;
addrSock.sin_family=AF_INET;
addrSock.sin_port=htons(6000);
addrSock.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
//INADDR_ANY表示接受任意地址
int retval;
//用来接受bind返回值
retval=bind(m_socket,(SOCKADDR*)addrSock,sizeof(SOCKADDR));
if(SOCKET_ERROR==retval)
{
closesocket(m_socket);
MessageBox(绑定失败);
return FALSE;
}
}很重要的一点是之后在对话框初始化函数OnInitDlg()中调用InitSock()。创建多线程。接受数据时,如没有数据到来,则会阻塞,导致程序暂停运行,所以把接受数据工作放到单独的线程中。在OnInitDlg()中创建多线程。因为需要给线程传递一个通信的套接字和响应消息的窗口句柄,所以需要额外定义一个结构体,用来存储这两个参数。
实现线程过程函数。如果要求不能用全局函数的话,那线程过程函数就要定义为static(它属于类本身).在线程过程函数中循环接受消息,利用::PostMessgae()函数给接受数据编辑框发送消息,以实现显示信息的功能.自定义消息的实现。因为在PostMessage中是自定义的消息(WM_RECVDATA),所以需要完成消息映射。
1)定义消息值
#define WM_RECVDATA WM_USER+1
(2)声明消息处理函数:
afx_msg void OnRecvData(WPARAM wParam,LPARAM lParam);
(3)完成消息映射:
ON_MESSAGE(WM_RECVDATA,OnRecvData)
.实现OnRecvData()函数。void CBDlg::OnRecvData(WPARAM wParam,LPARAM lParam)
{
CString str=(char*)lParam;
CString strTemp;
GetDlgItemText(IDC_EDIT2_RECEIVE,strTemp);
str+=\r\n;
str+=st
您可能关注的文档
- 培养与提升管理团队执行力.doc
- 培养中学生自信心的策略研究 2.doc
- 培养创造思维,改变学习模式,提高学生综合素质.doc
- 培养城郊中学生数学自主探究能力的课题研究1.doc
- 培养学生良好学习习惯 促进初步数学素养养成的研究.doc
- 培养学生思辨能力 提升作文内容深度.doc
- 培养学生质疑习惯_激发创新思维doc.doc
- 培优100分五年级数学下册系统归类培优卷一数与计算.doc
- 培养学生互批互评作文能力的研究结题报告.doc
- 培养幼儿良好生活习惯的调查报告.doc
- 2023年度十大热点人物的素材解读与运用-2024年高考语文作文热点素材积累运用与(全国通用).pdf
- 格力室外机中央空调价格表.pdf
- 2026上半年贵州事业单位联考贵州省交通运输厅招聘84人备考题库完整答案详解.docx
- 2026上半年贵州事业单位联考贵州传媒职业学院招聘12人备考题库附参考答案详解(达标题).docx
- 2026上半年贵州事业单位联考贵州省住房和城乡建设厅招聘16人备考题库含答案详解(培优).docx
- 2026上半年贵州事业单位联考玉屏侗族自治县招聘41人备考题库及答案详解(夺冠系列).docx
- 通信原理实验2数字频带传输系统实验.pdf
- 2026上半年贵州事业单位联考贵州医科大学第二附属医院招聘22人备考题库含答案详解(能力提升).docx
- 2026上海复旦大学计算力学与人工智能交叉研究院(筹)招聘专任研究员2人备考题库完整答案详解.docx
- 2026上半年贵州事业单位联考贵州民族大学招聘52人备考题库附参考答案详解(研优卷).docx
原创力文档

文档评论(0)