在Linux下基于TCP协议的文件传输程序汇总Word文档下载推荐.docx

上传人:b****5 文档编号:17212958 上传时间:2022-11-28 格式:DOCX 页数:13 大小:535.17KB
下载 相关 举报
在Linux下基于TCP协议的文件传输程序汇总Word文档下载推荐.docx_第1页
第1页 / 共13页
在Linux下基于TCP协议的文件传输程序汇总Word文档下载推荐.docx_第2页
第2页 / 共13页
在Linux下基于TCP协议的文件传输程序汇总Word文档下载推荐.docx_第3页
第3页 / 共13页
在Linux下基于TCP协议的文件传输程序汇总Word文档下载推荐.docx_第4页
第4页 / 共13页
在Linux下基于TCP协议的文件传输程序汇总Word文档下载推荐.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

在Linux下基于TCP协议的文件传输程序汇总Word文档下载推荐.docx

《在Linux下基于TCP协议的文件传输程序汇总Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《在Linux下基于TCP协议的文件传输程序汇总Word文档下载推荐.docx(13页珍藏版)》请在冰豆网上搜索。

在Linux下基于TCP协议的文件传输程序汇总Word文档下载推荐.docx

绑定成功后,执行监听,当有客户发送连接请求,执行Accept(),接收来自客户端的请求。

连接建立后,首先服务器向客服端发送的文件的文件名及扩展名等信息。

信息发送完毕,服务器方将待发送的数据读入缓冲区,通过套接字将数据发送出去。

发送完成后退出,并显示发送完成的信息。

图1服务器流程图

如图2所示,客户端程序完成文件的接收操作。

首先,创建一个流式套接字。

套接字创建成功后,对该套接字进行绑定。

绑定成功后,向服务器方发送连接请求。

连接成功后,首先,接收服务器发送的文件信息。

接收成功后,开始数据的接收。

文件接收完毕,显示文件已接收完成。

图2客户端流程图

【设计测试】

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

步骤如下:

(1)测试文件a.txt及服务器端文件源fileserver.c和可执行文件fileserver

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

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

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

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

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

服务器源码:

#include<

stdio.h>

stdlib.h>

unistd.h>

string.h>

sys/types.h>

sys/stat.h>

sys/socket.h>

netinet/in.h>

#definePORT6000

#defineLISTENQ20

#defineBUFFSIZE4096

#defineFILE_NAME_MAX_SIZE512

intmain(intargc,char**argv[])

{

//输入文件名称

charfilename[FILE_NAME_MAX_SIZE];

bzero(filename,FILE_NAME_MAX_SIZE);

printf("

Pleaseinputthefilenameyouwanatosend:

"

);

scanf("

%s"

&

filename);

getchar();

//设置一个socket地址结构

intsockfd,connfd;

structsockaddr_insvraddr,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,(structsockaddr*)&

svraddr,sizeof(svraddr))<

bind"

//监听

if(listen(sockfd,LISTENQ)<

listen"

while

(1)//服务器端一直运行

socklen_tlength=sizeof(clientaddr);

//等待请求

connfd=accept(sockfd,(structsockaddr*)&

clientaddr,&

length);

if(connfd<

connect"

//发送文件信息

charbuff[BUFFSIZE];

intcount;

bzero(buff,BUFFSIZE);

strncpy(buff,filename,strlen(filename)>

FILE_NAME_MAX_SIZE?

FILE_NAME_MAX_SIZE:

strlen(filename));

count=send(connfd,buff,BUFFSIZE,0);

if(count<

Sendfileimformation"

//读取文件并发送文件

FILE*fd=fopen(filename,"

rb"

if(fd==NULL)

File:

%snotfound!

\n"

filename);

else

intfile_block_length=0;

while((file_block_length=fread(buff,sizeof(char),BUFFSIZE,fd))>

file_block_length:

%d\n"

file_block_length);

if(send(connfd,buff,file_block_length,0)<

Send"

fclose(fd);

Transferfilefinished!

close(connfd);

close(sockfd);

//关闭socket

return0;

客户端源码:

intclientfd;

if(argc!

=2)//判断参数是否完整

fprintf(stderr,"

Usage:

./fileclient<

IP_Address>

structsockaddr_inclientaddr;

clientaddr,sizeof(clientaddr));

clientaddr.sin_family=AF_INET;

clientaddr.sin_addr.s_addr=htons(INADDR_ANY);

//INADDR_ANY表示自动获取本机地址

clientaddr.sin_port=htons(0);

//0表示让系统自动分配一个空闲端口

//创建用于internet的流协议(TCP)socket,用clientfd代表客户机socket

clientfd=socket(AF_INET,SOCK_STREAM,0);

if(clientfd<

0)

{

//把客户机的socket和客户机的socket地址结构联系起来

if(bind(clientfd,(structsockaddr*)&

clientaddr,sizeof(clientaddr))<

//设置一个socket地址结构体

structsockaddr_insvraddr;

if(inet_aton(argv[1],&

svraddr.sin_addr)==0)//IP地址来自程序的参数

inet_aton"

socklen_tsvraddrlen=sizeof(svraddr);

//向服务器发起连接,连接成功后client_socket代表了客户机和服务器的一个socket连接

if(connect(clientfd,(structsockaddr*)&

svraddr,svraddrlen)<

//接收文件信息

bzero(filename,FILE_NAME_MAX_SIZE);

count=recv(clientfd,buff,BUFFSIZE,0);

recv"

strncpy(filename,buff,strlen(buff)>

strlen(buff));

Preparingrecvfile:

%s---from---%s\n"

filename,argv[1]);

//接收文件

wb+"

if(NULL==fd)

open"

intlength=0;

while(length=recv(clientfd,buff,BUFFSIZE,0))

if(length<

intwritelen=fwrite(buff,sizeof(char),length,fd);

if(writelen<

length)

write"

Receievedfile:

%sfrom%sfinished!

close(clientfd);

//关闭socket

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 思想汇报心得体会

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1