简单的局域网聊天程序试验报告.docx

上传人:b****8 文档编号:30250909 上传时间:2023-08-13 格式:DOCX 页数:12 大小:104.70KB
下载 相关 举报
简单的局域网聊天程序试验报告.docx_第1页
第1页 / 共12页
简单的局域网聊天程序试验报告.docx_第2页
第2页 / 共12页
简单的局域网聊天程序试验报告.docx_第3页
第3页 / 共12页
简单的局域网聊天程序试验报告.docx_第4页
第4页 / 共12页
简单的局域网聊天程序试验报告.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

简单的局域网聊天程序试验报告.docx

《简单的局域网聊天程序试验报告.docx》由会员分享,可在线阅读,更多相关《简单的局域网聊天程序试验报告.docx(12页珍藏版)》请在冰豆网上搜索。

简单的局域网聊天程序试验报告.docx

简单的局域网聊天程序试验报告

青岛理工大学

C++面向对象课程设计报告

 

院(系):

计算机工程学院

专业:

软件工程

学生姓名:

__  

班级:

__软件102 学号:

201007190

题目:

_局域网聊天程序________

起迄日期:

_2012.6.18~2012.6.29

设计地点:

计算机学院机房

指导教师:

 

完成日期:

2012年6月29日

课程设计报告内容(供参考)

一、需求分析当前是数字信息时代,网络时代,任何一种编辑工具都不能忽视在网络上的应用,并且随着Internet的普及和宽带技术的成熟,越来越多的用户进入网络世界中享用浏览新闻、查询信息、发送邮件、在线观看电影等服务,享受网络带来的便利和办公的高效,与此同时一个新型的Web应用程序为网民之间提供了一个实时通信的功能和场所,这就是聊天室。

在网络早期就开始盛行,不论是BBS,IRC都有类似网上聊天室的机制。

聊天室为网友提供了实时性对话的渠道,是网络上极为流行的一项服务。

聊天室适用于网上会议或闲聊的一些场合。

聊天室为网友提供了较好的交友环境,网友之间相互以文字交谈,在形式上有点类似笔友的性质,却大大节省了书信往返的时间,这也是网上交友之所以如此热门的原因。

聊天室的设计目标

本课题是建立聊天通信模型,设计一个聊天室软件,包括服务器端和客户端,主要功能为:

服务器端功能:

1、初始化socket,创建服务器端。

2、维护一个链表,保存所有用户的IP地址、端口信息。

3、接受用户传送来的聊天信息,然后向链表中的所用用户转发。

4、接受用户传送来的连接判断命令,并向用户发出响应命令。

1.

二、设计内容

SOCKET连接过程

 根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:

服务器监听,客户端请求,连接确认。

  服务器监听:

是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。

  客户端请求:

是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。

为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。

  连接确认:

是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。

而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。

如何开发一个Server-Client模型的程序

 开发原理:

  服务器,使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于1024的端口),等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。

  客户端,使用Socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket。

客户端不需要指定打开的端口,通常临时的、动态的分配一个1024以上的端口。

  Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。

要学Internet上的TCP/IP网络编程,必须理解Socket接口。

Socket接口设计者最先是将接口放在Unix操作系统里面的。

如果了解Unix系统的输入和输出的话,就很容易了解Socket了。

网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。

Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。

1.

2.编写程序代码

客户端类:

classCClientSocket:

publicCSocket

{

//Attributes

private:

UINTm_nTimerID;

CChatDlg*m_pDlg;

//Operations

public:

CClientSocket(CChatDlg*pDlg);

virtual~CClientSocket();

//Overrides

public:

BOOLSetTimeOut(UINTuTimeOut);

BOOLKillTimeOut();

//ClassWizardgeneratedvirtualfunctionoverrides

//{{AFX_VIRTUAL(CClientSocket)

public:

virtualvoidOnReceive(intnErrorCode);

virtualvoidOnClose(intnErrorCode);

virtualBOOLOnMessagePending();

voidCClientSocket:

:

OnReceive(intnErrorCode)

{

//TODO:

Addyourspecializedcodehereand/orcallthebaseclass

charbuffer[BufferSize];

Receive(buffer,sizeof(buffer));

m_pDlg->ShowText(CString(buffer));

CSocket:

:

OnReceive(nErrorCode);

}

voidCClientSocket:

:

OnClose(intnErrorCode)

{

//TODO:

Addyourspecializedcodehereand/orcallthebaseclass

PostMessage(m_pDlg->m_hWnd,WM_CLIENT_CLOSE,0,0);

CSocket:

:

OnClose(nErrorCode);

}

BOOLCClientSocket:

:

OnMessagePending()

{

//TODO:

Addyourspecializedcodehereand/orcallthebaseclass

MSGmsg;

if(PeekMessage(&msg,m_pDlg->m_hWnd,WM_TIMER,WM_TIMER,PM_NOREMOVE))

{

if(msg.wParam==m_nTimerID)

{

PeekMessage(&msg,m_pDlg->m_hWnd,WM_TIMER,WM_TIMER,PM_REMOVE);

CancelBlockingCall();

returnFALSE;

}

}

returnCSocket:

:

OnMessagePending();

}

BOOLCClientSocket:

:

SetTimeOut(UINTuTimeOut)

{

m_nTimerID=SetTimer(m_pDlg->m_hWnd,1,uTimeOut,NULL);

returnm_nTimerID;

}

BOOLCClientSocket:

:

KillTimeOut()

{

returnKillTimer(m_pDlg->m_hWnd,m_nTimerID);

}

CServerSocket:

:

CServerSocket(CChatDlg*pDlg)

{

m_pDlg=pDlg;

m_nMessageCount=0;

}

CServerSocket:

:

~CServerSocket()

{

}

 

//Donoteditthefollowinglines,whichareneededbyClassWizard.

#if0

BEGIN_MESSAGE_MAP(CServerSocket,CSocket)

//{{AFX_MSG_MAP(CServerSocket)

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

#endif//0

/////////////////////////////////////////////////////////////////////////////

//CServerSocketmemberfunctions

服务器类

voidCServerSocket:

:

OnReceive(intnErrorCode)

{

//TODO:

Addyourspecializedcodehereand/orcallthebaseclass

charbuffer[BufferSize];

Receive(buffer,sizeof(buffer));

if(m_nMessageCount==0)

{

CStringstr(buffer);

m_ClientName=str;

str+="上线!

";

m_pDlg->ShowText(str);

for(inti=0;im_ServerSocket.size();i++)

{

if(m_pDlg->m_ServerSocket[i]!

=this)

{

m_pDlg->m_ServerSocket[i]->Send(str,str.GetLength()+1);

}

}

}

else

{

CStringstr;

str=m_ClientName+"说:

"+buffer;

m_pDlg->ShowText(str);

for(inti=0;im_ServerSocket.size();i++)

{

if(m_pDlg->m_ServerSocket[i]!

=this)

{

m_pDlg->m_ServerSocket[i]->Send(str,str.GetLength()+1);

}

}

}

m_nMessageCount++;

CSocket:

:

OnReceive(nErrorCode);

}

voidCServerSocket:

:

OnClose(intnErrorCode)

{

//TODO:

Addyourspecializedcodehereand/orcallthebaseclass

CStringstr(m_ClientName);

str+="离线!

";

m_pDlg->ShowText(str);

for(inti=0;im_ServerSocket.size();i++)

{

if(m_pDlg->m_ServerSocket[i]!

=this)

{

m_pDlg->m_ServerSocket[i]->Send(str,str.GetLength()+1);

}

else

{

m_pDlg->PostMessage(WM_CLIENT_CLOSE,i,0);

}

}

CSocket:

:

OnClose(nErrorCode);

}

建立服务器

连接服务器

进行聊天:

三、设计总结(可谈一谈本次课程设计的经验和体会)

通过对这个毕业设计的开发和学习,使自己对软件开发又有了新的理解,增加了自己的开发能力,也深刻理解了团队合作的精神。

本次开发,使我不仅学了 C++、数据结构、sql、winsock技术,还对网络编程进行了深入的学习,总结出了一些网络编程的特点,可以为今后的开发提供参考。

最后,要感谢老师对我的细心指导,同时感谢我的同学对我的宝贵建议。

四、参考文献

[1]DavidJ.Kruglinski,ProgrammingVisualC++.1998.

[2]施炜、李铮、秦颍,WindowsSockets规范和应用—Windows网络编程接口.

1996.

[3]AnthonyJonesandJimOhlumd,TCP/IP详解卷一:

协议(英文版).

机械工业出版社,2003.

[4]王罡林立志,基于Windows的TCP/IP编程.清华大学出版社,2002.

[5]蒋东兴等,WindowsSockets网络程序设计大全.清华大学出版社,1999.

五、附录

函数和变量名

注释

CAboutDlg

关于对话框的类

CChatApp

应用程序运行的基础

CChatDlg

主窗口

ONSEND

发送消息

ContentClient

连接服务器,判断是否连接到服务器

ONCLEAR

清除聊天记录

DoDataExchange

数据改变,改变列表中信息的显示用于更新列表中的信息

ONCONNECT

连接服务器

ONCANCEL

退出

Oncielentclose

关闭客户端

OnCloseLink

断开与已经建立连接的好友的连接

OnCtlColor

控件颜色处理,用于提示信息颜色的改变

OnInitDialog

对主界面进行一些初始化

ONSERVERCREATE

建立服务器

OnPaint

绘制界面窗口

OnserverClose

关闭服务器

OnSaveChatCont

保存聊天信息到文件

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1