文件传输工具的设计与实现实训PPT课件_第1页
文件传输工具的设计与实现实训PPT课件_第2页
文件传输工具的设计与实现实训PPT课件_第3页
文件传输工具的设计与实现实训PPT课件_第4页
文件传输工具的设计与实现实训PPT课件_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、.,1,第30章,文件传输工具的设计与实现实训,.,2,实训目的与实训环境,实训目的 加深对TCP协议的理解 熟悉流套接字的使用方法与API函数 掌握文件传输工具的实现流程 实训环境 运行Windows XP/ Windows Server 2003/Windows 7操作系统的PC一台 Visual C+6.0/ Visual Studio 2005/Visual Studio 2010开发环境,.,3,面向连接的Winsock流套接字,文件传输工具使用面向连接的Winsock流套接字发送或接收TCP报文来实现。 服务器端/客户端的编程分别按以下步骤进行: 服务器端: 创建套接字(socke

2、t) 将套接字绑定(bind)到一个特定的IP和PORT 将套接字设为监听模式,准备接受客户的请求(listen) 准备客户请求到来;当请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept) 用返回的套接字和客户端进行通信(send/recv) 返回,等待另一客户请求. 关闭套接字.,.,4,面向连接的Winsock流套接字,文件传输工具使用面向连接的Winsock流套接字发送或接收TCP报文来实现。 服务器端/客户端的编程分别按以下步骤进行: 客户端: 创建套接字(socket) 向服务器发出连接请求(connnect) 和服务器端进行通信(send/recv). 关闭

3、套接字.,.,5,socket()或WSASocket(),socket()或WSASocket(),send() recv(),recv() send(),closesocket(),closesocket(),bind(),客户机,服务器,listen(),connect(),accept(),.,6,Winsock 的库函数,初始化套接字(WSAStartup) 创建套接字(socket或WSASocket) 服务器将套接字绑定到IP和PORT (bind) 服务器将套接字设为监听模式,准备接受客户的连接请求(listen) 服务器开始监听,当收到客户机的连接请求时,返回一个新的对应于本

4、次连接的套接字(accept) 客户机向服务器发出连接请求(connnect) 客户机与服务器双向通信(send/recv) 关闭套接字(closesocket) 结束使用套接字(WSACleanup),.,7,将套接字设为监听模式 listen,设定 Socket 为监听状态,准备被连接。 格式: int listen( SOCKET s, int backlog ); 参数: s - Socket 的识别码 backlog - 未真正完成连接前(尚未调用 accept 前)允许的连接要求的最大个数 传回值: 成功 - 0 失败 - SOCKET_ERROR (调用 WSAGetLastEr

5、ror() 可得知原因) 说明: 使用者可利用此函数来设定 Socket 进入监听状态,并设定最多可有多少个在未真正完成连接前允许的连接要求。(目前最大值限制为 5, 最小值为1),.,8,接受连接请求,返回一个新的对应于本次连接的套接字(accept),接受连接要求,返回一个新建的流式套接字(SOCK_STREAM)。 格式: SOCKET accept(SOCKET s, SOCKADDR *addr,int FAR *addrlen ) 参数: s - Socket的识别码 addr - 存放来连接另一端的地址 addrlen - addr的长度 传回值: 成功 - 新的Socket识别

6、码 失败 - INVALID_SOCKET (调用 WSAGetLastError() 可得知原因) 说明: Server 端的应用程序调用此一函数来接受 Client 端要求的 Socket 连接请求。,.,9,向服务器发出连接请求connect,向指定地址的服务器发出连接请求。 格式: int connect( SOCKET s, const struct sockaddr FAR *name, int namelen ); 参数: s 本地Socket 的识别码 name - 想要连接的远程服务器Socket地址 namelen - name的长度 传回值: 成功 - 0 失败 - SO

7、CKET_ERROR (调用WSAGetLastError()可得知原因) 说明: 此函数用来向对方要求建立连接。若是指定的对方地址为 0 的话,会传回错误值。当连接建立完成后,使用者即可利用本地 Socket 来做传送或接收资料之用了。,.,10,发送数据 send,使用已连接的(connected)Socket发送数据。 格式: int send( SOCKET s, const char FAR *buf, int len, int flags ); 参数: s - Socket 的识别码 buf - 存放要发送数据的缓冲区 len 要发送数据的长度 flags 函数的调用方式 传回值:

8、 成功 已发送的数据长度 失败 - SOCKET_ERROR (调用 WSAGetLastError() 可得知原因) 说明: 此函数用于将数据从本地端通过socket发送到远程端。,.,11,接收数据 recv,接收数据。 格式: int recv( SOCKET s, char FAR *buf, int len, int flags ); 参数: s - Socket 的识别码 buf - 存放接收到的数据的缓冲区 len - buf 的长度 flags - 此函数被调用的方式 传回值: 成功 - 接收到的数据长度 (若对方 Socket 已关闭,则为 0) 失败 - SOCKET_ER

9、ROR (调用 WSAGetLastError() 可得知原因) 说明: 此函数用来接收已连接的(或无连接但已绑定的)套接字数据。,.,12,Winsock实现文件传输工具的参考流程(1),服务端,.,13,Winsock实现文件传输工具的参考流程(2),客户端,.,14,实训步骤,需求分析 使用winsock流式套接字编写基于TCP协议的文件传输工具,要求实现如下功能: 客户端程序可以指定服务器IP、服务端口、上传文件的本地路径和远程路径名。文件上传完毕自动关闭连接。 服务端程序可以显示已连接的客户机IP、客户机上传文件到服务器的目标路径。,.,15,2. 代码实现,阅读程序ftpserve

10、r.cpp和ftpclient.cpp,按注释的要求在下划线空白处填写代码。,.,16,3. 执行程序,创建两个工程ftpserver和ftpclient,分别编译ftpserver.cpp和ftpclient.cpp,链接生成ftpserver.exe和ftpclient.exe,并在2台计算机上分别运行它们 。服务器运行后,会显示“服务器创建成功!”,如图30.9所示。,.,17,客户端运行后,需要输入服务器所在的IP地址。服务器的端口在此输入2121,如图30.10所示。然后可以输入待上传的本地文件名,接着输入在目标服务器上保存时所使用的文件名,回车后系统将自动上传。上传结果如图30.9和30.10所示。,.,18,思考与讨论,文件的传输涉及文件名、文件长度等相关信息的传递。此例中是如何实现文件名、文件长度

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论