linux tcp实现文件传输,在Linux下基于TCP协议的文件传输程序.doc

在Linux下基于TCP协议的文件传输程序

Linux下基于TCP/IP协议的文件传输程序

【设计目的】

通过Linux C编程,设计一个基于TCP/IP的文件传输系统,实现网络文件的收发

【设计环境】

【设计方案】

文件读写

任意文件都可以二进制的方式进行读写,为了实现任意文件类型的传输,在读写文件的过程中,必须采用二进制的读写方式。

传输协议

为了保证数据的正确性,文件传输需要采用一种可靠的传输协议。UDP协议实现比较简单,但UDP面向无连接,传输过程中,会出现丢包的情况,导致数据发送失败。故采用面向连接的TCP/IP协议,防止传输过程中的数据丢失的情况。

大文件的传输

对于比较大的文件,应该进行分包操作,以防止占用过多的内存,导致文件发送失败。

【设计流程】

如图1所示,服务器程序作为文件的发送方。首先,服务器端输入要发送的文件。然后,创建一个流式套接字(SOCK_STREAM),进行绑定。绑定成功后,执行监听,当有客户发送连接请求,执行Accept(),接收来自客户端的请求。

连接建立后,首先服务器向客服端发送的文件的文件名及扩展名等信息。信息发送完毕,服务器方将待发送的数据读入缓冲区,通过套接字将数据发送出去。发送完成后退出,并显示发送完成的信息。

图1 服务器流程图

如图2所示,客户端程序完成文件的接收操作。首先,创建一个流式套接字。套接字创建成功后,对该套接字进行绑定。绑定成功后,向服务器方发送连接请求。连接成功后,首先,接收服务器发送的文件信息。接收成功后,开始数据的接收。文件接收完毕,显示文件已接收完成。

图2 客户端流程图

【设计测试】

了验证设计的正确性,在上对可执行文件进行了回环测试。

(2)客户端源文件及可执行文件

(3)执行服务器端文件fileserver并输入要传输的文件a.txt,等待客户端连接

(4)执行客户端文件fileclient,如果不输入IP地址将显示提示

(5)执行客户端文件后,输入完整命令,文件传输文件完成

(6)看到服务器端也显示文件传输完成

服务器源码:

#include

#include

#include

#include

#include

#include

#include

#include

#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(sockfd<0)

{

perror("socket");

exit(1);

}

//把socket和socket地址结构绑定

if(bind(sockfd,(struct sockaddr*)&svraddr,sizeof(svraddr))<0)

{

perror("bind");

exit(1);

}

//监听

if(listen(sockfd,LISTENQ)<0)

{

perror("l

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值