版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
linux下C语言实现文件传输的简单实例
实例来自互联网,这段测试代码实现r基本的文件传输原理,没有实现错误处理。
〃〃〃〃〃〃〃〃〃〃〃〃/〃//〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃/
//file_server.c文件传输顺序服务器示例
〃〃〃〃〃〃〃〃〃〃〃〃〃〃/〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃/〃〃〃〃〃〃〃〃〃〃〃〃〃
〃本文件是服务罂的代码
#include<netinet/in.h>//forsockaddrjn
#include<sys/types.h>//forsocket
#include<sys/socket.h>//forsocket
#include<stdio.h>//forprintf
#include<stdlib.h>//forexit
#include<string.h>//forbzero
/*
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
*/
#defineHELLO_WORLD_SERV匚R_PORT6666
#defineLENGTH_OF_LIS'EN_QUEUE20
#defineBUFFER_SIZE1024
#defineFILE_NAME_MAX_SIZE512
intmain(intargc,char**argv)
(
〃设置一个socket地址结构server_addr,代表服务器internet地址,端口
structsockaddrjnser/er_addr;
bzero(&server_addr,sizeof(server_addr));//把一段存区的容全部设置为0
server_addr.sin_family=AF_INET;
server_addr.sin_addr.s_addr=htons(INADDR_ANY);
server_addr.sin_port=htons(HELLO_WORLD_SERVER_PORT);
〃创隹用于internet的流协议(TCP)socket,用server_socket代表服务器socket
intserver_socket=socket(PF_INET,SOCK_STREAM,0);
if(server_socket<0)
{
printf("CreateSocketFailed!");
exit(l);
}
〃把socket和socket地址结构联系起来
if(bind(server_socket,(structsockaddr*)&server_addrzsizeof(server_addr)))
(
printf("ServerBindPort:%dFailed!",HELLO_V/ORLD_SERVER_PORT);
exit(l);
}
//server_socket用于监听
If(listen(server_socketzLENGTH_OF_LISTEN_QUEUE))
{
printf("ServerListenFailed!");
exit(l);
}
while(1)〃服务器端要一直运行
〃定义客户端的socket地址结构client_addr
structsockaddrjnclient_addr;
socklen_tlength=sizeof(client_addr);
〃接受一个到servejsocket代表的socket的一个连接
〃如果没有连接请求,就等待到有连接请求--这是accept函数的特性
//accept函数返回一个新的socket,这个socket(new_server_socket)用于同连
接到的客户的通信
〃new_server_socket代表了服务器和客户端之间的一个通信通道
//accept函数把连接到的客户端信息填写到客户端的socket地址结构
client_addr中
intnew_server_socket=accept(server_socket,(struct
sockaddr*)&client_addr,&length);
if(new_server_socket<0)
(
printf("ServerAcceptFailed!\n");
break;
}
charbuffer[BUFFER_SIZE];
bzero(buffer,BUFFER_SIZE);
length=recv(new_server_socket,buffer,BUFFER_SIZE,O);〃这里先接收
客户端发来的要获取的文件名
If(length<0)
(
printf("ServerRecieveDataFailed!\n");
break;
}
charfile_name[FILE_NAME_MAX_SIZE+l];
bzero(file_namezFILE_NAME_MAX_SIZE+1);
strncpy(file_name,buffer,
strlen(buffer)>FILE_NAME_MAX_SIZE?FILE_NAME_MAX_SIZE:strlen(buffer));
//intfp=open(file_namezO_RDONLY);
//if(fp<0)
FILE*fp=fopen(file_name,"r");
if(NULL==fp)
(
printf("File:\t%sNotFound\n",file_name);
}
else
{
bzero(buffer,BUFFER_SIZE);
intfile_block_length=0;
//while((file_block_length=read(fp,buffer,BUFFER_SIZE))>O)
while((file_block_length=
fread(buffer,sizeof(char),BUFFER_SIZE,fp))>0)
<
printf("file_block_length=%d\n",file_block_length);
〃发送buffer中的字符串到new_server_socket,实际是给客户端
if(send(new_server_socket/bufferzfile_block_length/0)<0)
{
printf("SendFile:\t%sFailed\n",file_name);
break;
)
bzero(bufferzBUFFER_SIZE);
}〃这段代码是循环读取
文件的一段数据,在循环调用send,发送到客户端,这里强调一点的TCP每次接受最多是
1024字节,多了就会分片,因此每次发送时尽量不要超过1024字节。
//close(fp);
fclose(fp);
printf("File:\t%sTransferFinished\n"zfile_name);
}
〃关闭与客户端的连接
close(new_server_socket);
〃关闭监听用的socket
close(server_socket);
return0;
}
iiiniiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiniiiiiiiiiiiiii
//file_client.c文件传输客户端程序示例
〃〃〃〃〃〃〃〃〃〃〃〃〃〃/〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃/〃〃〃〃〃/〃〃〃〃〃〃〃/
〃本文件是客户机的代码
#include<netinet/in.h>〃forsockaddrjn
#include<sys/types.h>〃forsocket
#include<sys/socket.h>//forsocket
#include<stdio.h>//forprintf
#include<stdlib.h>//forexit
#include<string.h>//forbzero
/*
#include<sys/types.h>
#Include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
*/
#defineHELLO_WORLD_SERVER_PORT6666
#defineBUFFER_SIZE1024
#defineFILE_NAME_MAX_SIZE512
intmain(intargc,char**argv)
if(argc!=2)
u
printf(Usage:./%sServerIPAddress\n"/argv[O;);
exit(l);
}
〃设置一个socket地址结构client_addr,代表客户机internet地址,端口
structsockaddrjnclient_addr;
bzero(&client_addr,sizaof(client:_addr));〃把一段存区的容全部设置为0
client_addr.sin_family=AF_INET;//internet协议族
client_addr.sin_addr.s_addr=htons(INADDR_ANY);〃INADDR_ANY表示自
动获取本机地址
client_addr.sin_port=htons(O);〃。表示让系统自动分配一个空闲端口
〃创建用于internet的流协议(TCP)socket,用clienjsocket代表客户机socket
intclient_socket=socket(AF_INET,SOCK_STREAM,0);
if(client_socket<0)
{
printf(uCreateSocketFailed!\n");
exit(l);
?
〃把客户机的socket和客户机的socket地址结构联系起来
if(bind(client_socket,(structsockaddr*)&client_addrzsizeof(client_addr)))
{
printf("ClientBindPortFailed!\n");
exit(l);
}
〃设置一个socket地址结构server_addr,代表服务器的internet地址,端口
structsockaddrjnser/er_addr;
bzero(&server_addr,sizeof(server_addr));
server_addr.sin_family=AF_INET;
if(inet_aton(argv[l]z&server_addr.sin_addr)==0]〃服务器的IP地址来自程
序的参数
(
printf(uServerIPAddressError!\n");
exit(l);
)
server_addr.sin_port=htons(HELLO_WORLD_SERVER_PORT);
socklen_tserver_addr_length=sizeof(server_addr);
〃向服务器发起连接,连接成功后clienJsocket代表了客户机和服务器的一个socket
连接
if(connect(client_socketz(structsockaddr*)&server_addr/
server_addr_length)<0)
(
printf("CanNotConnectTo%s!\n"/argv[l]);
exit(l);
}
charfile_name[FILE_NAME_MAX_SIZE+l];
bzero(flle_namezFILE_NAME_MAX_SIZE+1);
printf("PleaseInputFileNameOnServer:\t");
scanf("%s"zfile_name);
charbuffer[BUFFER_SIZE];
bzero(buffer,BUFFER_SIZE);
strncpy(buffer,file_naFe,
strlen(file_name)>BUFFER_SIZE?BUFFER_SIZE:strlen(file_name));
〃向服务器发送buffer中的数据
send(client_socket,buffer,BUFFER_SIZEzO);
//intfp=open(file_name,O_WRONLY|O_CREAT);
//if(fp<0)
FILE*fp=fopen(file_name,"w");
if(NULL==fp)
(
printf("File:\t%sCanNotOpenToW
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年枣庄市薛城区社区工作者招聘考试模拟试题及答案解析
- 2026年昆明市西山区社区工作者招聘考试参考试题及答案解析
- 2026年马鞍山市雨山区城管协管招聘笔试备考试题及答案解析
- 2026年河源市源城区城管协管招聘笔试备考题库及答案解析
- 2026年上海市奉贤区城管协管招聘笔试备考试题及答案解析
- 2026年内蒙古自治区呼和浩特市社区工作者招聘笔试参考题库及答案解析
- 2026年内江市市中区社区工作者招聘考试备考题库及答案解析
- 2026年茂名市茂港区城管协管招聘考试备考题库及答案解析
- 吊栏施工平台施工方案(3篇)
- 2026年高职(会计信息管理)财务数据分析试题及答案
- 2026山东济南市中城市发展集团有限公司社会招聘备考题库附答案详解
- 注册会计师战略中ESG战略实施的管理体系
- 2025学年第二学期杭州市高三年级二模教学质量检测数学试卷(含答案)
- 泉州市2026社区工作者招聘考试笔试题库(含答案)解析
- 采购份额管理制度
- 2026年河南工业贸易职业学院单招职业适应性测试模拟卷(附答案)
- 网络安全知识培训资料
- 2025年电梯安全管理员考试题库及答案
- 健康档案保密制度
- 2026浙江事业单位招聘(公基)考试题目及答案
- 2026及未来5年中国球形硅微粉行业市场发展态势及投资前景研判报告
评论
0/150
提交评论