聊天程序实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计说明书

课程名称:计算机网络

设计题目:聊天程序

院系:计算机科学与信息工程学院

小组成员:

专业班级:

指导教师:

需要完整代码请联系我:QQ:1879024792

2017年10月31日

课程设计任务书

聊天程序

摘要:即时通讯软件的出现正在逐渐改变人们的沟通与交际方式。无论近在咫尺,还是远隔重洋,也只是在键盘和鼠标之间就可以解决问题。网络聊天程序越来越影响着我们的网络生活。

习惯了通过类似ICQ、QQ、MSN之类的聊天软件和天南海北的朋友聊天,但是这些聊天程序都需要Internet的支持,而无法在局域网内部“大显身手”。那么你是否想到过要让单位内部的员工和寝室周围的同学,不用上Internet就可以轻松体验到局域网聊天的快乐呢?有了这种想法,开发局域网聊天工具就有了必要性。

本论文讨论了Windows环境下局域网聊天程序的设计思路和设计方法。其中网络通信部分采用流行的TCP/IP协议。程序采用典型的C/S(服务器/客户端)构架。用socket编程设计网络通讯。界面设计部分采用Windows MFC 框架。本文最终设计了一个简易版本的聊天软件,包括登陆、退出、消息收/发等功能。

关键词:聊天软件;网络通讯;MFC;课程设计;Visual C++

目录

1.设计背景 (1)

1.1背景知识 (1)

1.2基本要求与说明 (3)

2.设计方案 (5)

2.1整体设计 (5)

2.2服务器端设计 (5)

2.3客户端设计 (6)

3.方案实施 (7)

3.1服务器端实现 (7)

3.2客户端实现 (13)

4.结果与结论 (19)

4.1实验结果 (19)

4.2结论 (20)

5.收获与致谢 (21)

6.参考文献 (22)

7.附录 (23)

1. 设计背景

1.1背景知识

(一)MFC对Socket编程的封装类简介

Microsoft Windows Class Library(MFC) 中提供了较高级封装的类用来实现网络通信。

CAsyncSocket类封装了Windows Sockets API函数,提供了较低层的与Windows Sockets对话接口,一般适合于有相当水平的网络编程基础者使用,可方便地进行底层的网络事件通知及信息回叫控制等操作。

Csocket类派生于CAsyncSocket,它继承了父类中一些常用易懂得的Windows Sockets API函数,并对CAsyncSocket中底层的较难控制的一些API函数或成员函数进行了处理,使得网络传输简捷易用。同时它支持模块化的后台信息处理,解决了CAsyncSocket中较难克服的多线程处理。

Visual C++ 在Windows中实现Socket的CSocket 类关成员函数参数说明:

1.BOOL Create( UINT nSocketPort = 0,int nSocketType = SOCK_STREAM,long

lEvent = FD_READ |FD_WRITE|FD_OOB|FD_ACCEPT|FD_CONNECT| FD_CLOSE,LPCTSTR lpszSocketAddress = NULL )

该函数用来建立Socket。返回值如果函数成功则返回非零值;否则返回0。其中:nSocketPort :为所选择的Socket端口,一般要大于1023,如果该参数为0,则由系统选定一端口,默认值为0;

nSocketType:为套接字类型:是SOCK_STREAM或SOCK_DGRAM ,SOCK_STREAM表示为流套接字(本实验使用基于TCP连接的流套接字编程),SOCK_DGRAM 表示为数据报套接字(将在以后实验中讲述),默认值为SOCK_STREAM ;

lEvent :标识该Socket 要完成哪种工作,默认值为FD_READ|FD_WRITE|FD_OOB| FD_ACCEPT|FD_CONNECT|FD_CLOSE ;

lpszSockAddress:一个指向字符串的指针,该字符串包含了被连接套接口的网络地址。一个带点的数字,如“128.56.22.8”默认值为NULL。

注意:在CSocket里,将WinsockAPI的初始化(socket)和绑定(bind)两部分工作

都完成了。

2.BOOL Listen( int nConnectionBacklog = 5 )

该函数的作用是等待Socket请求,返回值调用成功时返回非零值,否则为0。

Listen仅对那些支持连接的套接字起作用,也就是SOCK_STREAM类型的套接字。在进程应答连接并把它放到等待队列时,套接字被置成被动模式(passive mode)。本函数一般由那些一次可以有多个连接的服务器使用(或任何需要接收连接的应用)。

nConnectionBacklog 表示等待队列的长度,默认值为最大值5,有效值为1-5。

3.BOOL Connect( LPCTSTR lpszHostAddress,UINT nHostPort )

该函数的作用是提出请求。其中:

lpszHostAddress:是对象连接的套接字的网络地址、机器名,例如 或以句点分隔的数字,例如“211.80.43.100”。

nHostPort:为接受请求进程的网络地址和Socket端口号。

注意:Connect函数还有另一个版本:

BOOL Connect(const SOCKADDR* lpSockAddr,int nSockAddrLen);

具体用法可以参阅MSDN Library中关于CAnyscSocket类的阐述。

4.virtual void Close( )

该函数的作用是关闭该Socket。

(二)使用CSocket类的同步问题和解决方法

Server端:m_recvive. Receive( void* lpBuf,int nBufLen,int nFlags = 0 );

Client端:m_client. Send( const void* lpBuf,int nBufLen,int nFlags = 0 );

接着再分析一下各个类中提到的常用方法的同步特性。

1.Listen(…):执行后不管有没有连接,立即返回。

2.Connect(…):如果服务器端有端口正在侦听,则立即成功返回,如果没有,则过

几秒钟显示无法连接。

3.Accept(…):Listen函数返回后可以执行此函数,但是此函数是基于阻塞的,只

要客户机connect连接并且端口正确,则立即成功返回,建立连接。如果迟迟侦测不到连接,则不断阻塞,直到连接成功或者强行关闭。

4.Send(…):调用后就将数据保存在socket缓冲区中,立即返回。

5.Receive(…):和Accept一样的阻塞,直到能从socket缓冲区成功读取到nBufLen

相关文档
最新文档