• 大小: 11.27MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-07-09
  • 语言: 其他
  • 标签: TCP  linux  

资源简介

本项目利用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\link.command.1.tlog

     文件       2720  2012-03-02 22:10  TCP文件传输\Transfer\Transfer\Debug\link.read.1.tlog

     文件        884  2012-03-02 22:10  TCP文件传输\Transfer\Transfer\Debug\link.write.1.tlog

     文件        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个文件信息

评论

共有 条评论