Windows下基于TCP 的文件传输


基于TCP的C/S结构程序,能上传下载文件,在客户端显示进度,能随时终止上传下载,传输速度也还不错
资源截图
代码片段和文件信息
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define SERVER_PORT 7000 //侦听端口
#define BUF_SIZE  40960

char *down_path = “E:\第二个作业\TCP\downfile\“;
char down_name[][512] = {“11.rar““hh.exe““ll.exe““5.jpg“};
char up_name[][512] = {“vc.rar““xinjiang.ts““kuwo.exe““dvb.pdf““4.jpg“};
unsigned long get_file_lenth(const char* filename)
{
    int file_lenth;
    FILE *fp=fopen(filename“rb“);
    if(fp==NULL)
    {
        printf(“ERROE:open file %s faile!
“filename);
        return 0;
    }
    fseek(fp0LSEEK_END);
    file_lenth=ftell(fp);
    fseek(fp0LSEEK_SET);
    return file_lenth;
}

//文件上传
void client_put(const char filename[]SOCKET sockfd)
{

char  buf_client_write[BUF_SIZE];
int  write_bytesfile_block;
FILE  *fp;
long int  file_lenth;
long int  lenth[10];//装文件长度数组
char  filesize[256];
char  ch;
int          i=0;

//将buf_server_write中文件名发送至服务端
    memset(buf_client_write0sizeof(buf_client_write));//将数组清空
    strncpy(buf_client_writefilenamestrlen(filename)); 
    if((write_bytes=send(sockfdbuf_client_writeBUF_SIZE0))==-1)
    {
         printf(“Server : I send filename fail 
“);
         return;
    }
printf(“filename success
“);

file_lenth=get_file_lenth(filename);
    lenth[0] = file_lenth/1024;//将字节数转换为KB
printf(“the file lenth is %d KB
“(lenth[0]+1));

//发送文件大小
itoa(file_lenthfilesize10);
send(sockfdfilesize256+10);

//打开要发送的文件
fp = fopen(filename“rb+“);
if(fp == NULL)
{
MessageBox(NULL“文件为空“““MB_OK);
return ;
}
else
{
//清空发送缓冲区
        memset(buf_client_write0sizeof(buf_client_write));
        file_block=0;
while(file_lenth>0)
        {
if(!kbhit())// 没有按键操作就传输数据
{
if((file_block=fread(buf_client_writesizeof(char)BUF_SIZEfp))<0)
{
printf(“read error
“);
return;
}
file_lenth -= file_block;
if(send(sockfdbuf_client_writefile_block0)<0)
{
printf(“send error
“);
return;
}
i++;
if(30 == i)
{
fprintf(stdout“ˉ“);
i=0;
}
memset(buf_client_write0sizeof(buf_client_write));
if(feof(fp))
break;
}
else
{
ch = getch();
if(ch != ‘p‘)
continue;
do
{
ch = getch(); // 接收第二次按键
}
while(ch != ‘p‘);
}
              
        }
        fclose(fp);
        printf(“Client: I transmit finish !
“);
}



}

//文件下载
void client_get(const char filename[]SOCKET sockfd)
{
char    buf[BUF_SIZE]recv_buf[BUF_SIZE];
    int    write_bytesread_bytesfile_block;
    FILE    *fp1;
char       filesize[256]ch;
long int   filelen;
int    i=0;
char    full_name[512];
int time1time2;

fd_set fdsets;
int nTimeOut=0;
TIMEVAL tv;
int nNum;
tv.tv_sec = nTimeOut / 1000;
tv.tv_usec = nTimeOut % 1000;
nNum = select(0 &

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     119562  2014-03-26 21:38  TCPclient4.jpg

     文件       7290  2014-04-02 15:16  TCPclientclient.c

     文件       4321  2014-03-21 21:20  TCPclientclient.dsp

     文件        535  2014-03-21 19:47  TCPclientclient.dsw

     文件      50176  2014-04-02 16:53  TCPclientclient.ncb

     文件      53760  2014-04-02 16:53  TCPclientclient.opt

     文件        246  2014-04-02 15:16  TCPclientclient.plg

     文件    2057216  2014-03-26 20:35  TCPclientDebugclient.bsc

     文件     188474  2014-04-02 15:16  TCPclientDebugclient.exe

     文件     255472  2014-04-02 15:16  TCPclientDebugclient.ilk

     文件      30326  2014-04-02 15:16  TCPclientDebugclient.obj

     文件    2853176  2014-04-02 11:46  TCPclientDebugclient.pch

     文件     508928  2014-04-02 15:16  TCPclientDebugclient.pdb

     文件          0  2014-03-26 20:35  TCPclientDebugclient.sbr

     文件      66560  2014-04-02 16:47  TCPclientDebugvc60.idb

     文件      69632  2014-04-02 15:16  TCPclientDebugvc60.pdb

     文件     794160  2014-03-26 08:51  TCPclientdvb.pdf

     文件     119562  2012-04-07 12:26  TCPserver4.jpg

     文件     783156  2014-03-09 10:12  TCPserver5.jpg

     文件    2057216  2014-03-24 12:05  TCPserverDebugserver.bsc

     文件     167994  2014-04-02 11:52  TCPserverDebugserver.exe

     文件     213004  2014-04-02 11:52  TCPserverDebugserver.ilk

     文件      23026  2014-04-02 11:52  TCPserverDebugserver.obj

     文件    2856520  2014-04-02 11:52  TCPserverDebugserver.pch

     文件     484352  2014-04-02 11:52  TCPserverDebugserver.pdb

     文件          0  2014-03-24 12:05  TCPserverDebugserver.sbr

     文件      58368  2014-04-02 16:43  TCPserverDebugvc60.idb

     文件      69632  2014-04-02 11:52  TCPserverDebugvc60.pdb

     文件     199645  2009-03-21 09:49  TCPserverLinux.mht

     文件       6733  2014-04-02 11:52  TCPserverserver.c

............此处省略13个文件信息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)