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

成都附近旅游景区哪里好玩站内seo是什么意思

成都附近旅游景区哪里好玩,站内seo是什么意思,vps上安装wordpress,唯品会 一家专门做特卖的网站在原生套接字编程中我们介绍了利用文件长度来控制文件传输的方法,本节我们将采用另一种传输方式,我们通过判断字符串是否包含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://www.hkea.cn/news/709636/

相关文章:

  • 台州企业网站制作公司郴州网站推广
  • 如何做移动端网站邮件营销
  • 网站制作佛山crm管理系统
  • 网站综合营销方案设计网页设计教程
  • 东莞做网站制作宁波技术好的企业网站制作
  • 广州做网站公司哪家好如何注册一个网站
  • 网站备案协议书互联网营销师证书含金量
  • 广州企业网站建设报价免费推广网站大全
  • 宁波网站排名怎么提交网址让百度收录
  • 杭州 手机网站建设活动营销
  • 加网络网站建设工作室做一个企业网站大概需要多少钱
  • 张家港优化网站seo百度网盘下载
  • 烟台有没有做网站网站安全
  • 网站建设与制作设计公司惠州seo代理商
  • 东营新闻网今日头条常州网站seo
  • 东莞全网合一网站黄页引流推广网站软件免费
  • wordpress的数据库在那里百度seo如何快速排名
  • wordpress手机客服代码免费seo快速排名工具
  • web网站开发作品关键词歌词图片
  • 汕头行业网站seo培训公司
  • 网站背景图片优化关键词歌曲免费听
  • 郑州做网站哪家专业我要发布信息
  • 西安做网站优化的公司石家庄seo按天扣费
  • 2022年西安封城通知自动app优化下载
  • 无锡做网站哪家公司好一个公司可以做几个百度推广
  • 专题网站建设工作关键词林俊杰无损下载
  • adobe 网站开发软件软文写作兼职
  • 英文网站建设 淮安免费培训网站
  • 隔离需要多少钱湖南网站seo找行者seo
  • wordpress简单企业站seo怎么刷排名