VC 使用CSockets进行小文件传送

      这是一对实现在两台计算机间传送文件的函数,我没有看到过使用CSocket进行文件传送的代码,希望此代码对你有用。代码中包含两个函数,第一个用于服务器端,第二个用于客户端。本文提供的方法并不适用于大型文件的传送。

  下面给出服务器端代码:

    void SendFile()
    {
       #define PORT 34000     // Select any free port you wish
       AfxSocketInit(NULL);
       CSocket sockSrvr;
       sockSrvr.Create(PORT); // Creates our server socket
       sockSrvr.Listen();     // Start listening for the client at PORT
       CSocket sockRecv;
       sockSrvr.Accept(sockRecv);    // Use another CSocket to accept the connection
       CFile myFile;
       myFile.Open("C://ANYFILE.EXE", CFile::modeRead | CFile::typeBinary);
       int myFileLength = myFile.GetLength();     // Going to send the correct File Size
       sockRecv.Send(&myFileLength, 4);           // 4 bytes long
    
       byte* data = new byte[myFileLength];
       myFile.Read(data, myFileLength);
       sockRecv.Send(data, myFileLength);        //Send the whole thing now
       myFile.Close();
       delete data;
       sockRecv.Close();
   }

   

     以下是客户端代码:

     void GetFile()
   {
       #define PORT 34000 /// Select any free port you wish
       AfxSocketInit(NULL);
       CSocket sockClient;
       sockClient.Create();
       // "127.0.0.1" is the IP to your server, same port
       sockClient.Connect("127.0.0.1", PORT);
       int dataLength;
       sockClient.Receive(&dataLength, 4); //Now we get the File Size first
    
       byte* data = new byte[dataLength];
       sockClient.Receive(data, dataLength); //Get the whole thing
       CFile destFile("C://temp//ANYFILE.EXE",
      CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);
       destFile.Write(data, dataLength); // Write it
       destFile.Close();
       delete data;
       sockClient.Close();
    }

 

   最好确认服务器端函数在客户端函数之前运行,本文的代码可以方便地添加到工程中,解决服务器/客户模型中的文件传送问题。

 

ZZ:http://blog.sina.com.cn/s/blog_554b1f1b0100bp1m.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值