在Linux下基于TCP协议的文件传输程序汇总.docVIP

在Linux下基于TCP协议的文件传输程序汇总.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux下基于TCP/IP协议的文件传输程序 【设计目的】 通过Linux C编程,设计一个基于TCP/IP的文件传输系统,实现网络文件的收发 【设计环境】 Ubuntu 12.04 【设计方案】 文件读写 任意文件都可以二进制的方式进行读写,为了实现任意文件类型的传输,在读写文件的过程中,必须采用二进制的读写方式。 传输协议 为了保证数据的正确性,文件传输需要采用一种可靠的传输协议。UDP协议实现比较简单,但UDP面向无连接,传输过程中,会出现丢包的情况,导致数据发送失败。故采用面向连接的TCP/IP协议,防止传输过程中的数据丢失的情况。 大文件的传输 对于比较大的文件,应该进行分包操作,以防止占用过多的内存,导致文件发送失败。 【设计流程】 如图1所示,服务器程序作为文件的发送方。首先,服务器端输入要发送的文件。然后,创建一个流式套接字(SOCK_STREAM),进行绑定。绑定成功后,执行监听,当有客户发送连接请求,执行Accept(),接收来自客户端的请求。 连接建立后,首先服务器向客服端发送的文件的文件名及扩展名等信息。信息发送完毕,服务器方将待发送的数据读入缓冲区,通过套接字将数据发送出去。发送完成后退出,并显示发送完成的信息。 图1 服务器流程图 如图2所示,客户端程序完成文件的接收操作。首先,创建一个流式套接字。套接字创建成功后,对该套接字进行绑定。绑定成功后,向服务器方发送连接请求。连接成功后,首先,接收服务器发送的文件信息。接收成功后,开始数据的接收。文件接收完毕,显示文件已接收完成。 图2 客户端流程图 【设计测试】 了验证设计的正确性,在Ubuntu 12.04系统上对可执行文件进行了回环测试。 步骤如下: (1)测试文件a.txt及服务器端文件源fileserver.c和可执行文件fileserver (2)客户端源文件及可执行文件 (3)执行服务器端文件fileserver并输入要传输的文件a.txt,等待客户端连接 (4)执行客户端文件fileclient,如果不输入IP地址将显示提示 (5)执行客户端文件后,输入完整命令,文件传输文件完成 (6)看到服务器端也显示文件传输完成 服务器源码: #include stdio.h #include stdlib.h #include unistd.h #include string.h #include sys/types.h #include sys/stat.h #include sys/socket.h #include netinet/in.h #define PORT 6000 #define LISTENQ 20 #define BUFFSIZE 4096 #define FILE_NAME_MAX_SIZE 512 int main(int argc, char **argv[]) { //输入文件名称 char filename[FILE_NAME_MAX_SIZE]; bzero(filename,FILE_NAME_MAX_SIZE); printf(Please input the file name you wana to send:); scanf(%s,filename); getchar(); //设置一个socket地址结构 int sockfd,connfd; struct sockaddr_in svraddr,clientaddr; bzero(svraddr,sizeof(svraddr));//把一段内存区的内容全部设置为0 svraddr.sin_family=AF_INET; svraddr.sin_addr.s_addr=htonl(INADDR_ANY); svraddr.sin_port=htons(PORT); //创建用于internet的流协议(TCP)socket sockfd=socket(AF_INET,SOCK_STREAM,0); if(sockfd0) { perror(socket); exit(1); } //把socket和socket地址结构绑定 if(bind(sockfd,(struct sockaddr*)svraddr,sizeof(svraddr))0) { perror(bind); exit(1); } //监听 i

文档评论(0)

qiwqpu54 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档