好文档 - 专业文书写作范文服务资料分享网站

局域网的文件传输与消息发送

天下 分享 时间: 加入收藏 我要投稿 点赞

《网络 程序设计》

课 程 设 计 报 告 书

题 目:局域网文件传输与消息通信 专 业:网络工程 学 号:20091423 学生姓名:史政法 指导教师:魏宁 完成日期:2012年06月06日

一、 题目及要求

Window程序设计的基本要求:

1.熟练掌握网络的基本概念和原理;

2.熟练掌握网络编程接口Socket概念及编程原理; 3.掌握基于TCP/IP的Internet编程技术; 4.掌握各种软件开发工具的使用过程及方法。

本实例程序的技术要点是:

? 如何从CasyncSocket类派生出自己的WinSock类。 ? 理解WinSock类与应用程序框架的关系。 ? 重点学习流式套接字对象的使用。 ? 处理网络事件的方法。

二、 系统概要设计

1、CSocket类的介绍 在MFC中,为了提供面向对象的编程方式而封装了两个WinSock类:一个是CAsyncSocket类,另一个是CSocket类。他们的不同点在于前者使用的是非阻塞模式操作,而后者可以支持阻塞模式的I/O操作。CSocket类是从CAsyncSocket类中继承来的,他为程序员提供了更高级的抽象性。由于CSocket类和CArchive类一起使用,并且管理了通讯的大多数操作,从而使程序员从网络编程的底层细节中解脱了出来,不必使用CAsyncSocket的一些成员函数和一些Windows Socket API函数来处理通信问题。共同使用CSocket和CArchive类对象进行编程是最简单的WinSock编程模式。

下面是使用CSocket类进行网络通信的过程

(1) 构造CSocket类对象

(2) 用CSocket类对象的Create函数创建Windows Socket,Create()函数会调用

Bind()函数将此函数绑定的指定的地址和端口。

(3) Socket创建完毕后,Listen()函数在服务器端进行监听客户的连接请求。 (4) 在这一步,服务器端调用Accept()函数对客户端发来的请求进行接受和处理,

而客户端则调用Connect()函数向服务器发出连接请求。

(5) 在客户端和服务器端的数据传输完成后,应该分别在两边销毁创建的CSocket

对象。

2、编程思路和工程实现 用MFC AppWizard新建一个给予对话框的工程,在第三步中添加Windows SocketS的

支持,建立的程序界面如右图:

控件类型

静态文本 static text 静态文本 static text 静态文本 static text IP地址 Internet add IP地址 Internet add 编辑框 edit box 命令按钮 button 命令按钮 button 命令按钮 button 命令按钮 button 命令按钮 button 命令按钮 button 进程 process

IDC_STATIC

控件ID

Caption 本机的ip: 要连接的ip: 消 息 启动 关闭 发送消息 传送文件 停止传送 退出系统

IDC_STATIC_SERVPORT IDC_STATIC_MSG IDC_MYIP IDC_YOURIP IDC_EDIT_MSG IDC_BUTTONCONNECT IDC_BUTTON_DISCONNEIDC_BUTTON_SENDMSG IDC_BUTTON_SEND_FILIDC_BUTTON_STOP IDCANCEL

IDC_PROGRESS_SEND_F

图1—-程序主对话框中的控件属性

图2—-对话框中的控件对象定义相应的成员变量

编程思路:首先在对话框中输入要连接的IP地址,然后单击“启动”按钮,要连接的主机也做相同的操作,两边都准备完事后,两台计算机就可以消息和文件的传输了。

单击“启动”按钮时,处理函数启动了监听线程来启动服务,主要的语句如下: pThreadListen = ::AfxBeginThread(_ListenTcpThread,this); 点击“发送消息”按钮时,处理函数启动了消息发送线程来进行消息的传送,语句如下: pThreadSendMsg = ::AfxBeginThread(_SendMsgThread,this); 当点击“传送文件”按钮时,处理函数启动了文件传输线程来进行文件传输,语句如下: pThreadSendMsg = ::AfxBeginThread(_SendFileThread,this);

下面主要介绍一下要用到的三个线程和一个文件接收处理函数。首先要产生三个线程对象: CWinThread _ListenTcpThread; CWinThread _SendFileThread; CWinThread _SendMsgThread;

三、 系统详细设计

1. 监听线程函数

UINT _ListenTcpThread(LPVOID lparam) {

CFiletranDlg *pDlg=(CFiletranDlg *)lparam; if(pDlg->StopServer==true) return -1; CSocket sockSrvr; pDlg->m_Potr=PORT;//保存当前使用端口,用于关闭 int createSucceed=sockSrvr.Create(pDlg->m_Potr); if(createSucceed==0)

{ AfxMessageBox(\错误!\ return -1; } int listenSucceed=sockSrvr.Listen(); //开始监听 if(listenSucceed==0) { AfxMessageBox(\错误!\ return -1; } CSocket recSo; SOCKADDR_IN client; int iAddrSize=sizeof(client); int acceptSucceed=sockSrvr.Accept(recSo,(SOCKADDR *)&client,&iAddrSize); //接受连接并取得对方IP if(acceptSucceed==0) { AfxMessageBox(\错误!\ return -1; } sockSrvr.Close();//关闭 char flag[FLAG]={0}; if(recSo.Receive(flag,FLAG)!=2) { return -1; } pDlg->m_type=flag[0]; if(pDlg->m_type=='D') return 0; pThreadListen=::AfxBeginThread(_ListenTcpThread,pDlg); pDlg->ReceiveFileMsg(recSo,client);

return 0; }

2. 传送文件线程函数

UINT _SendFileThread(LPVOID lparam) { CFiletranDlg *pDlg=(CFiletranDlg *)lparam; if(pDlg->StopServer==true) return -1; CSocket sockClient;

局域网的文件传输与消息发送

《网络程序设计》课程设计报告书题目:局域网文件传输与消息通信专业:网络工程学号:20091423学生姓名:史政法
推荐度:
点击下载文档文档为doc格式
2ev1g5czh08n6j4879hw6x2111f20r00bau
领取福利

微信扫码领取福利

微信扫码分享