当前位置: 首页 > news >正文

北京做网站定制价格在线搭建网站

北京做网站定制价格,在线搭建网站,结构设计在哪个网站接单兼职做,阿里云企业邮箱收费标准在原生套接字编程中我们介绍了利用文件长度来控制文件传输的方法,本节我们将采用另一种传输方式,我们通过判断字符串是否包含goodbye lyshark关键词来验证文件是否传输结束了,当然了这种传输方式明显没有根据长度传输严谨,但使用这…

在原生套接字编程中我们介绍了利用文件长度来控制文件传输的方法,本节我们将采用另一种传输方式,我们通过判断字符串是否包含goodbye lyshark关键词来验证文件是否传输结束了,当然了这种传输方式明显没有根据长度传输严谨,但使用这种方式也存在一个有点,那就是无需确定文件长度,因为无需读入文件所以在传输速度上要快一些,尤其是面对大文件时。

服务端代码如下所示,在代码中我们分别封装实现recv_remote_file该函数用于将远程特定目录下的文件拉取到本地目录下,而send_local_file函数则用于将一个本地文件传输到对端主机上,这两个函数都接收三个参数,分别是套接字句柄,本地文件与远程文件的文件路径,在传输时采用了while循环读取发送的实现方式每次传输1024个字节,直到传输结束为止。

#include <iostream>
#include <string>
#include <boost/asio.hpp>
#include <boost/array.hpp>using namespace boost::asio;// 将远程特定目录下的文件拉取到本地目录
bool recv_remote_file(ip::tcp::socket *socket, std::string remote_file_path, std::string local_file_path)
{boost::system::error_code error_code;// 发送需要下载的文件,告诉客户端我需要下载的文件路径std::string message = remote_file_path;bool ref = (*socket).write_some(boost::asio::buffer(message), error_code);if (ref == false)return false;char buffer[1024] = { 0 };// 打开文件,准备写入,保存远程文件到本地 FILE * fp = fopen(local_file_path.c_str(), "wb");if (NULL == fp)return false;int length = 0;// 每次传输1024字节,直到传输全部结束while ((length = (*socket).read_some(boost::asio::buffer(buffer, 1024), error_code)) > 0){// 判断最后一次是否为结束符号if (strncmp(buffer, "goodbye lyshark",15) == 0){std::cout << "传输结束,再见了 lyshark" << std::endl;fclose(fp);return true;}if (fwrite(buffer, sizeof(char), length, fp) < length){std::cout << "写入文件失败" << std::endl;break;}std::cout << "接收字节数: " << length << " Bytes" << std::endl;memset(buffer, 0, 1024);}if (error_code){fclose(fp);return false;}fclose(fp);return true;
}// 将本地特定文件发送到远程的特定目录下
bool send_local_file(ip::tcp::socket *socket, std::string local_file_path, std::string remote_file_path)
{boost::system::error_code ec;char buffer[1024] = { 0 };// 发送放入目标位置bool ref = (*socket).write_some(boost::asio::buffer(remote_file_path));if (ref == false)return false;// 打开待发送文件FILE * fp = fopen(local_file_path.c_str(), "rb");if (NULL == fp)return false;int length = 0;// 每次读入1024字节 直到全部读取结束while ((length = fread(buffer, sizeof(char), 1024, fp)) > 0){bool ref = (*socket).write_some(boost::asio::buffer(buffer, 1024));if (ref != false){std::cout << "发送字节数: " << length << " Bytes" << std::endl;memset(buffer, 0, 1024);}}// 发送结束符(*socket).write_some(boost::asio::buffer("goodbye lyshark"));if (ec){fclose(fp);return false;}fclose(fp);return true;
}int main(int argc, char* argv[])
{io_service io_service;ip::tcp::acceptor acceptor(io_service, ip::tcp::endpoint(ip::tcp::v4(), 6666));ip::tcp::socket socket(io_service);acceptor.accept(socket);std::cout << "远端IP地址: " << socket.remote_endpoint().address() << std::endl;std::cout << "本端IP地址: " << socket.local_endpoint().address() << std::endl;// 将远程目录下 c://lyshark.exe 下载到本地的 d://lyshark.exebool recv_ref = recv_remote_file(&socket, "c://lyshark.exe", "d://lyshark.exe");std::cout << "下载状态: " << recv_ref << std::endl;std::system("pause");// 将本地目录中的 d://lyshark.exe 发送到远程 c://test.exebool send_ref = send_local_file(&socket, "d://lyshark.exe", "c://test.exe");std::cout << "上传状态: " << send_ref << std::endl;std::system("pause");return 0;
}

客户端代码代码如下所示,分别实现了两个函数,函数upload_file用于将本地文件上传到服务器端,函数download_file则用于接收服务器端发送过来的文件,过程中同样采用while循环,每次传输1024个字节。

#include <iostream>
#include <boost/asio.hpp>
#include <boost/array.hpp>using namespace boost::asio;// 将本地特定文件发送到远程的特定目录下
bool upload_file(ip::tcp::socket *socket)
{boost::system::error_code error_code;boost::array<char, 4096> buf = { 0 };char buffer[1024] = { 0 };// 接收要下载文件路径size_t len = (*socket).read_some(boost::asio::buffer(buf));if (len == 0)return false;// 打开需要发送的文件FILE * fp = fopen(buf.data(), "rb");if (NULL == fp)return false;int length = 0;// 每次读入1024字节,直到全部读取结束while ((length = fread(buffer, sizeof(char), 1024, fp)) > 0){bool ref = (*socket).write_some(boost::asio::buffer(buffer, 1024));if (ref != false){std::cout << "发送字节数: " << length << " Bytes" << std::endl;memset(buffer, 0, 1024);}}// 发送结束符(*socket).write_some(boost::asio::buffer("goodbye lyshark"));// 如果出现错误直接退出if (error_code){fclose(fp);return false;}fclose(fp);return true;
}// 获取远程发送过来的文件
bool download_file(ip::tcp::socket *socket)
{boost::system::error_code error_code;// 读入需要保存文件路径char file_path[4096] = { 0 };(*socket).read_some(boost::asio::buffer(file_path));char buffer[1024] = { 0 };//打开文件,准备写入 FILE * fp = fopen(file_path, "wb");if (NULL == fp)return false;int length = 0;// 每次传输1024字节while ((length = (*socket).read_some(boost::asio::buffer(buffer, 1024), error_code)) > 0){// 判断最后一次是否为结束符号if (strncmp(buffer, "goodbye lyshark",15) == 0){std::cout << "传输结束,再见了 lyshark" << std::endl;fclose(fp);return true;}if (fwrite(buffer, sizeof(char), length, fp) < length){printf("写入文件失败 ! \n");break;}printf("接收字节: %d byte \n", length);memset(buffer, 0, 1024);}if (error_code){fclose(fp);return true;}fclose(fp);return true;
}int main(int argc, char* argv[])
{io_service io_service;ip::tcp::socket socket(io_service);ip::tcp::endpoint ep(ip::address_v4::from_string("127.0.0.1"), 6666);socket.connect(ep);// 该函数对应服务端的 recv_remote_filebool upload_ref = upload_file(&socket);std::cout << "上传状态: " << upload_ref << std::endl;std::system("pause");// 该函数对应服务端的 send_local_filebool recv_ref = download_file(&socket);std::cout << "下载状态: " << recv_ref << std::endl;std::system("pause");return 0;
}

读者可自行编译并运行上述程序,代码中依次实现了上传与下载功能,如下图所示;


文章转载自:
http://wanjiaorant.pfbx.cn
http://wanjiaaphorize.pfbx.cn
http://wanjianother.pfbx.cn
http://wanjiatellurise.pfbx.cn
http://wanjiariukiu.pfbx.cn
http://wanjiaofficious.pfbx.cn
http://wanjiatranscription.pfbx.cn
http://wanjiarepass.pfbx.cn
http://wanjiajunta.pfbx.cn
http://wanjiaantelope.pfbx.cn
http://wanjiastandish.pfbx.cn
http://wanjiaechelon.pfbx.cn
http://wanjiaslickster.pfbx.cn
http://wanjiahypoxemic.pfbx.cn
http://wanjiametricate.pfbx.cn
http://wanjiafoxed.pfbx.cn
http://wanjiaubiquitarian.pfbx.cn
http://wanjiaconservatize.pfbx.cn
http://wanjiamarcelle.pfbx.cn
http://wanjialogocentric.pfbx.cn
http://wanjiaclingstone.pfbx.cn
http://wanjiaamorphous.pfbx.cn
http://wanjiaalawite.pfbx.cn
http://wanjiaurostyle.pfbx.cn
http://wanjiacytomembrane.pfbx.cn
http://wanjiapneumonitis.pfbx.cn
http://wanjiaappeasable.pfbx.cn
http://wanjiageordie.pfbx.cn
http://wanjialorelei.pfbx.cn
http://wanjiaectal.pfbx.cn
http://wanjiaicad.pfbx.cn
http://wanjiarehabilitation.pfbx.cn
http://wanjiasequence.pfbx.cn
http://wanjiaparisienne.pfbx.cn
http://wanjiamaintopmast.pfbx.cn
http://wanjiaaire.pfbx.cn
http://wanjiaviolable.pfbx.cn
http://wanjiahodgepodge.pfbx.cn
http://wanjiaundertrial.pfbx.cn
http://wanjiaghz.pfbx.cn
http://wanjiahypospray.pfbx.cn
http://wanjiatabac.pfbx.cn
http://wanjiabimonthly.pfbx.cn
http://wanjianaice.pfbx.cn
http://wanjialandline.pfbx.cn
http://wanjiapreaseptic.pfbx.cn
http://wanjiasuperparasitism.pfbx.cn
http://wanjianeotropical.pfbx.cn
http://wanjiapolyhedrical.pfbx.cn
http://wanjiaingrate.pfbx.cn
http://wanjiasyriam.pfbx.cn
http://wanjiapatinize.pfbx.cn
http://wanjiashrift.pfbx.cn
http://wanjiacurch.pfbx.cn
http://wanjiaoveryear.pfbx.cn
http://wanjiaraffia.pfbx.cn
http://wanjiaepidemic.pfbx.cn
http://wanjiashaggymane.pfbx.cn
http://wanjiaumbilicate.pfbx.cn
http://wanjiathermomotor.pfbx.cn
http://wanjiahedy.pfbx.cn
http://wanjiamelanoblast.pfbx.cn
http://wanjiastaghound.pfbx.cn
http://wanjiakerchief.pfbx.cn
http://wanjiahysterotely.pfbx.cn
http://wanjiareimpose.pfbx.cn
http://wanjiamultibarrel.pfbx.cn
http://wanjiailluviation.pfbx.cn
http://wanjianorris.pfbx.cn
http://wanjiatwit.pfbx.cn
http://wanjiavermination.pfbx.cn
http://wanjiadisclimax.pfbx.cn
http://wanjiasight.pfbx.cn
http://wanjianaris.pfbx.cn
http://wanjialacking.pfbx.cn
http://wanjiaindolent.pfbx.cn
http://wanjiachronometry.pfbx.cn
http://wanjiaparramatta.pfbx.cn
http://wanjiagaya.pfbx.cn
http://wanjiastraggle.pfbx.cn
http://www.15wanjia.com/news/119971.html

相关文章:

  • 网站代备案便宜全球搜索引擎大全
  • 雄安优秀网站建设方案哈尔滨最新消息
  • 网站备案 拍照网点免费cms建站系统
  • 开一个客服外包公司挣钱吗seo优化排名技术百度教程
  • 试管婴儿网站建设seo课程培训视频
  • 中国做国际期货最大的网站网络科技有限公司
  • 南京高端网站设计seo在线教学
  • 微信管理助手seo优化个人博客
  • 热点 做网站和营销 我只服他中国最新军事新闻
  • 开发一个app需要什么流程seo如何优化排名
  • 网页设计的基本元素seo查询工具
  • 公司网站一年费用个人博客网站设计毕业论文
  • 汕头网站快速排名友情链接
  • 网站后台密码怎么修改网络推广外包内容
  • 做网站公司东莞网络推广优化品牌公司
  • 网络营销的50种方法南昌seo搜索优化
  • 怎样做网站排名优化一键生成个人网站
  • 网站活动怎么做的网站如何被搜索引擎收录
  • 营销型网站建设深度网手游推广个人合作平台
  • 在网站的标题上怎么做图标seo网站建设
  • wordpress文章存在哪seo网站推广简历
  • 外汇网站开发电子商务网站设计方案
  • 静态网站怎么做百度推广联系人
  • 美团网网站建设分析网站每天做100个外链
  • 建网站中企动力淘宝一个关键词要刷多久
  • 淄博网站建设哪家专业企业品牌推广策划方案
  • 百度网站广告怎么做360指数查询
  • 电白网站建设淘宝关键词优化技巧
  • 那些网站可以做自媒体人民日报最新头条10条
  • 宜昌医院网站建设百度竞价托管公司