资源简介
本项目利用tcp协议在windows和linux之间传递文件,windows下实现服务器端,linux下实现客户端。此程序可以方便用户在windows和linux之间快速的传递文件,在局域网下传输速度可以达到8MB/s。
代码片段和文件信息
#include
#include
#include
#include
#include
#include
#include
#include
//通过一个新建的socket利用缓冲区buffer向客户端传递文件,文件描述符是fp,是一个已经打开的文件
void send_file(char *bufferint NewConnectionFILE *fp)
{
int read_length=0;
int sum=0;
//while(fgets(buffer1000fp)!=NULL)//这种方法经过多次测试发现不行,原因就是不能返回读取的大小
while((read_length=fread(buffer11000fp))>0)
{
//int len=strlen(buffer);
int len=read_length;
int sended=0;
int count;
buffer[read_length]=‘\0‘;
while(len>0)
{
count=send(NewConnectionbuffer+sendedlen0);
len-=count;
sended+=count;
}
sum+=read_length;
}
fclose(fp);
printf(“succeed to transfer filesend length is %d\n“sum);
}
int main(int argcchar *argv[])
{
int sockfd;
int len;
struct sockaddr_in address;
int result;
char *path;
char* file_name;
char state;
char buffer[1000];
int choice;
if(argc <4)
{
perror(“Input format: transfer send/receive file_path ip port(optional)!\n“);
exit(-1);
}
//获取用户的操作,1表示接收文件,2表示发送文件给服务器
choice=atoi(argv[1]);
//获取要接收文件在服务器上的路径或者要发送的文件
path=argv[2];
if(choice ==1)
printf(“want to receive file %s\n“path);
else
printf(“want to send file %s\n“path);
if(strrchr(path‘/‘)==NULL)
{
printf(“You have inputted a file without assigning a directory“);
if(choice ==1)
printf(“server can‘t locate the exact position of the file!\n“);
else
printf(“client can‘t locate the file to send\n“);
exit(-1);
}
file_name=strrchr(path‘/‘)+1;
sockfd=socket(AF_INETSOCK_STREAM0);
address.sin_family=AF_INET;
address.sin_addr.s_addr=inet_addr(argv[3]);
if(argc==5)
address.sin_port=htons(atoi(argv[4]));
else
address.sin_port=htons(12345);
len=sizeof(address);
result=connect(sockfd(struct sockaddr*)&addresslen);
if(result==-1)
{
perror(“connect failed!“);
exit(-1);
}
if(choice==1)//从服务器接收文件
{
printf(“ok\n“);
//开始通信
write(sockfd“1“1);//向服务器发送一个标志,说明是要从服务器接收文件
write(sockfdpath100);
read(sockfd&state1);
if(state==‘1‘)
{
FILE *fp;
char directory[20]=“download/“;
fp=fopen(strcat(directoryfile_name)“rb“);//这里打开文件要按二进制打开,否则会在传输过程中出错,因为有换行符的问题
if(fp==NULL)
{
write(sockfd“0“1);
printf(“open or create file failed!\n“);
exit(-1);
}
else
{
int file_length;
char length[10];
int finished=0;
int len=1000;
int count=0;
int read_length;
write(sockfd“1“1
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 13700 2012-03-02 22:31 TCP文件传输\client\transfer
文件 5610 2012-03-02 22:31 TCP文件传输\client\transfer.c
文件 241 2012-03-02 22:44 TCP文件传输\ReadMe.txt
文件 51833 2012-03-02 22:28 TCP文件传输\TCP文件传输 .docx
文件 31744 2012-03-02 22:10 TCP文件传输\Transfer\Debug\Transfer.exe
文件 371444 2012-03-02 22:10 TCP文件传输\Transfer\Debug\Transfer.ilk
文件 412672 2012-03-02 22:10 TCP文件传输\Transfer\Debug\Transfer.pdb
文件 33226752 2012-03-02 20:21 TCP文件传输\Transfer\ipch\transfer-4d8310bf\transfer-81aa3f91.ipch
文件 680 2012-03-02 22:10 TCP文件传输\Transfer\Transfer\Debug\cl.command.1.tlog
文件 13258 2012-03-02 22:10 TCP文件传输\Transfer\Transfer\Debug\CL.read.1.tlog
文件 516 2012-03-02 22:10 TCP文件传输\Transfer\Transfer\Debug\CL.write.1.tlog
文件 1420 2012-03-02 22:10 TCP文件传输\Transfer\Transfer\Debug\li
文件 2720 2012-03-02 22:10 TCP文件传输\Transfer\Transfer\Debug\li
文件 884 2012-03-02 22:10 TCP文件传输\Transfer\Transfer\Debug\li
文件 564 2012-03-02 22:10 TCP文件传输\Transfer\Transfer\Debug\mt.command.1.tlog
文件 846 2012-03-02 22:10 TCP文件传输\Transfer\Transfer\Debug\mt.read.1.tlog
文件 386 2012-03-02 22:10 TCP文件传输\Transfer\Transfer\Debug\mt.write.1.tlog
文件 381 2012-03-02 22:10 TCP文件传输\Transfer\Transfer\Debug\Transfer.exe.intermediate.manifest
文件 87 2012-03-02 22:10 TCP文件传输\Transfer\Transfer\Debug\Transfer.lastbuildstate
文件 4696 2012-03-02 22:10 TCP文件传输\Transfer\Transfer\Debug\Transfer.log
文件 32791 2012-03-02 22:10 TCP文件传输\Transfer\Transfer\Debug\transfer.obj
文件 150528 2012-03-02 22:10 TCP文件传输\Transfer\Transfer\Debug\vc100.idb
文件 77824 2012-03-02 22:10 TCP文件传输\Transfer\Transfer\Debug\vc100.pdb
文件 5057 2012-03-02 21:33 TCP文件传输\Transfer\Transfer\transfer.c
文件 3224 2012-02-23 21:59 TCP文件传输\Transfer\Transfer\Transfer.vcxproj
文件 944 2012-02-23 21:59 TCP文件传输\Transfer\Transfer\Transfer.vcxproj.filters
文件 143 2012-02-23 21:40 TCP文件传输\Transfer\Transfer\Transfer.vcxproj.user
文件 25579520 2012-03-02 22:28 TCP文件传输\Transfer\Transfer.sdf
文件 891 2012-02-23 21:40 TCP文件传输\Transfer\Transfer.sln
..A..H. 11264 2012-03-02 22:28 TCP文件传输\Transfer\Transfer.suo
............此处省略11个文件信息
相关资源
- TCP-IP高效编程:改善网络程序的44个技
- Linux应用大全:服务器架设
- 用TCP/IP进行网际互联 (卷一二三)
- OMNET++5.4.1(Part2) for Linux
- Linux命令行与shell脚本编程大全第3版完
- Linux Device Drivers(3rd Edition) 英文原版
- Linux命令行大全.pdf
- YUMI – Multiboot USB Creator-(一个U盘装多
- 嵌入式LINUX程序设计设计案例与实验教
- Linux Shell脚本攻略第2版.pdf
- Linux命令行与shell脚本编程大全第3版高
- LINUX内核完全剖析、源码及Bochs编译环
- qt-creator-linux-x86-opensource-2.5.0.part2
- qt-creator-linux-x86-opensource-2.5.0part1
- Linux窗口程序设计-Qt4精彩分析 part02
- 微软雅黑.ttf(msyh.ttf) Linux字体
- TCP-IP Illustrated(1、2、3全卷)
- Sed与awk第三版(高清版).pdf
- linux 学习手册 linux基础 linux高级教程
- 深入理解计算机系统 完整中文版 带目
- Synopsys Installer 3.2
- Samba rpm安装包
- Mycat-server-1.6.7.1-release-20200209222254-li
- Linux Shell编程从入门到精通 第 2 版
- 追踪linux TCP/IP 代码运行_光盘文件1
- Linux命令行与shell脚本编程大全(第
- Linux程序设计入门经典书合集
- TCP_IP协议详解全三卷高清非扫描PDF
- 从实践中学嵌入式Linux操作系统
- zw_Linux内核设计的艺术:图解Linux操作
评论
共有 条评论