Linux利用tcp传输文件,在Linux下基于TCP协议的文件传输程序

《在Linux下基于TCP协议的文件传输程序》由会员分享,可在线阅读,更多相关《在Linux下基于TCP协议的文件传输程序(11页珍藏版)》请在人人文库网上搜索。

1、Linux下基于TCP/IP协议的文件传输程序【设计目的】通过Linux C编程,设计一个基于 TCP/IP的文件传输系统,实现网络文件的收发【设计环境】Ubu ntu 12.04 J【设计方案】(1 )文件读写任意文件都可以二进制的方式进行读写,为了实现任意文件类型的传输,在读写文件的过程中,必须采用二进制的读写方式。(2 )传输协议为了保证数据的正确性,文件传输需要采用一种可靠的传输协议。UDP协议实现比较简单,但UDP面向无连接,传输过程中,会出现丢包的情况,导致数据发送失败。故采用面向连 接的TCP/IP协议,防止传输过程中的数据丢失的情况。(3)大文件的传输对于比较大的文件,应该进行。

2、分包操作,以防止占用过多的内存,导致文件发送失败。【设计流程】如图1所示,服务器程序作为文件的发送方。首先,服务器端输入要发送的文件。然后, 创建一个流式套接字(SOCK_STREAM),进行绑定。绑定成功后,执行监听,当有客户发 送连接请求,执行 Accept(),接收来自客户端的请求。连接建立后,首先服务器向客服端发送的文件的文件名及扩展名等信息。信息发送完毕,服务器方将待发送的数据读入缓冲区, 通过套接字将数据发送出去。发送完成后退出,并显示 发送完成的信息。图1服务器流程图如图2所示,客户端程序完成文件的接收操作。首先,创建一个流式套接字。套接字创建成功后,对该套接字进行绑定。 绑定成。

3、功后,向服务器方发送连接请求。 连接成功后,首先, 接收服务器发送的文件信息。接收成功后,开始数据的接收。文件接收完毕,显示文件已接收完成。图2客户端流程图【设计测试】了验证设计的正确性,在Ubu ntu 12.04系统上对可执行文件进行了回环测试。步骤如下:(1 )测试文件a.txt及服务器端文件源fileserver.c和可执行文件fileserver4)执行客户端文件fileclient ,如果不输入 IP 地址将显示提示(2)客户端源文件及可执行文件3)执行服务器端文件 fileserver 并输入要传输的文件 a.txt ,等待客户端连接5)执行客户端文件后,输入完整命令,文件传输文。

4、件完成6)看到服务器端也显示文件传输完成服务器源码:#include #include #include #include #include #include #include #include #define PORT 6000#define LISTENQ 20#define BUFFSIZE 4096#define FILE_NAME_MAX_SIZE 512int main(int argc, char *argv)/输入文件名称char filenameFILE_NAME_MAX_SIZE; bzero(filename,FILE_NAME_MAX_SIZE); printf(Ple。

5、ase 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);/ 把一段内存区的内容全部设置为 0svraddr.sin_family=AF_INET; svraddr.sin_addr.s_addr=htonl(INADDR_ANY); svraddr.sin_port=htons(PORT);/ 创建。

6、用于 internet 的流协议 (TCP)socket sockfd=socket(AF_INET,SOCK_STREAM,0); if(sockfdFILE_NAME_MAX_SIZE?FILE_NAME_MAX_SIZE:st rlen(filename);count=send(connfd,buff,BUFFSIZE,0);if(count0) printf(file_block_length:%dn,file_block_length); if(send(connfd,buff,file_block_length,0)#include #include #include #inclu。

7、de #include #include #include #define PORT 6000#define LISTENQ 20#define BUFFSIZE 4096#define FILE_NAME_MAX_SIZE 512int main(int argc, char *argv)int clientfd;if(argc!=2)/ 判断参数是否完整fprintf(stderr,Usage:./fileclient n);exit(1);struct sockaddr_in clientaddr;bzero(&clientaddr,sizeof(clientaddr);clientad。

8、dr.sin_family=AF_INET;表示自动获取本socketclientaddr.sin_addr.s_addr=htons(INADDR_ANY);/INADDR_ANY 机地址clientaddr.sin_port=htons(0); /0 表示让系统自动分配一个空闲端口 /创建用于 internet 的流协议 (TCP)socket, 用 clientfd 代表客户机 clientfd=socket(AF_INET,SOCK_STREAM,0);if(clientfdFILE_NAME_MAX_SIZE?FILE_NAME_MAX_SIZE:strlen( buff);prin。

9、tf(Preparing recv file : %s-from-%s n,filename,argv1);/接收文件FILE *fd=fopen(filename,wb+);if(NULL=fd) perror(open); exit(1); bzero(buff,BUFFSIZE);int length=0; while(length=recv(clientfd,buff,BUFFSIZE,0) if(length0) perror(recv); exit(1);int writelen=fwrite(buff,sizeof(char),length,fd); if(writelenlength) perror(write);exit(1); bzero(buff,BUFFSIZE);printf(Receieved file:%s from %s finished!n,filename,argv1); fclose(fd);close(clientfd); /关闭 socket return 0。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值