TCP客户端服务器的数据传送

客户端----发送方

先导入WSAStartup函数的一个声明

//获取文件大小

struct stat s
这个结构体包含了文件的基本信息,例如大小、所有者、权限、最后访问和修改时间等。

//发送信息给服务器

char*ptemp=szbuf;
while(*++ptemp!='\0');

while(*--ptemp!='\\');
 ++ptemp;

ptemp就提取了文件路径中的文件名

strcpy(fh.m_szFileName,ptemp);//把文件名复制给m_szFileName

send(sockclient,(char*)&fh,sizeof(fh),0);//并发送给接收方

//接收服务器的回复

int num=recv(sockclient,szResult,sizeof(szbuf),0);//使用 recv 函数来接收通过套接字 sockclient 发来的数据。recv 函数接收数据到 szResult 数组中,sizeof(szbuf) 指定了接收数据的最大字节数,用 szbuf 的大小作为接收的大小,

//读文件并发送

 int nReadNum=fread(szContent,sizeof(char),ONEPAGE,pfile);

//使用 fread 函数从文件流 pfile 中读取数据。fread 函数将读取的数据存储在 szContent 数组中。sizeof(char) 是每个字符占用的字节数,ONEPAGE 是要读取的字符数,定义了读取数据的块大小。nReadNum 变量存储了实际读取到的字符数。

        if(nReadNum>0)
    {
        send(sockclient,szContent,nReadNum,0);

// 如果读取成功,会使用 send 函数将读取的数据通过套接字 sockclient 发送给客户端,szContent 是要发送的数据,nReadNum 是发送数据的字节数

    }

//文件关闭

fclose(pfile);

 

服务器----接收方

//接收文件信息

recv(sockWaiter,(char*)&fh,sizeof(fh),0);

//yes or no

 char szResult[RESULT]={0};
 char szContent[ONEPAGE]={0};

    cin>>szResult;//输入回复yes

//发送给客户端

 send(sockWaiter,szResult,sizeof(szResult),0);

//yes

//指定存储路径

char szpath[MAX_PATH]={0};
        cin>>szpath;

strcat(szpath,fh.m_szFileName);//从用户接收一个路径szpath,然后将文件名 fh.m_szFileName 连接到该路径的末尾,从而构建一个完整的文件路径

//在指定位置创建文件

FILE *pfile=fopen(szpath,"wb");//fopen 函数以二进制写模式打开一个文件

//接收文件内容

 int nReadNum=recv(sockWaiter,szContent,sizeof(szContent),0);//接收szContent里面的内容
            if(nReadNum>0)
            {
                fwrite(szContent,sizeof(char),nReadNum,pfile);
                noffset+=nReadNum;
                cout<<"recv file:"<<noffset*100/fh.FileSize<<endl;
                if(noffset==fh.FileSize){
                    break;
                }
            }

//读取成功,这行代码使用 fwrite 函数将读取到的数据从 szContent 缓冲区写入到由 pfile 指向的文件中。sizeof(char) 是每个字符的字节大小,nReadNum 是要写入的字符数

//fwrite 函数将确保数据被完整地写入文件,即使数据量超过了缓冲区的大小,也会正确处理

//关闭文件

fclose(pfile);

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值