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

做h5哪个网站好用我是新手如何做跨境电商

做h5哪个网站好用,我是新手如何做跨境电商,连云制作企业网站,万链网站做的怎么样?本章将会详细的介绍如何使用 socket 实现 UDP 协议的传送数据。有了前面基础知识的铺垫。对于本章的理解将会变得简单。将会从基础的 Serve 的初始化#xff0c;进阶到 Client 的初始化#xff0c;以及 run。最后实现一个简陋的小型的网络聊天室。 目录 1.UdpSever.h 1.1 构造…        本章将会详细的介绍如何使用 socket 实现 UDP 协议的传送数据。有了前面基础知识的铺垫。对于本章的理解将会变得简单。将会从基础的 Serve 的初始化进阶到 Client 的初始化以及 run。最后实现一个简陋的小型的网络聊天室。 目录 1.UdpSever.h 1.1 构造函数 1.2 initServe 函数 2. UdpSever.cc 3. udpClient.hpp  3.1 构造函数 3.2 init初始化函数 3.3 run 4. udpClient.cc 5. 对于  UdpSever.h 中run函数的实现 6. 结尾 1.UdpSever.h 在这个文件里面需用定义 Sever 的一个类里面变量为_ip, _port_sockfd。要实现的函数为构造函数、初始化(init)、运行(run)、析构函数。进行初始化是实现服务器的网络的核心当然run 也非常重要。关于实现构造函数的时候为什么只需要 port 以及defaultip是什么我后面都会进行讲解。 class udpServer{public:udpServer(uint16_t port): _ip(defaultIp), _port(port){}void initServe(){}void start(){}~udpServer() {}private:uint16_t _port;string _ip;int _sockfd;}; 1.1 构造函数 里面使用了 port因为这个服务器的特点我们使用的 linux 有2个或是2个以上的 ip因此我们在进行绑定的时候是不可以进行直接绑定的。要不然当使用不同的 ip 的时候会导致数据无法从客户端发送到服务端。因此需要使用默认的ip “0.0.0.0”。后面的cc文件中使用智能指针的方式进行定义 1.2 initServe 函数 进行初始化本质就是使用 socket 打开文件会返回文件描述符可以理解为打开网卡这个文件然后进行传递数据。然后进行 bind 使用 struct sockaddr_in loacl, 对于这个结构体里面的数据进行填写然后进行 bind 绑定。 对于soket 函数官方的定义为返回一个文件描述符fd 第一个参数是选择网络通信还是本地通信第二变量表示是使用udp 还是 tcp, 我们使用的是 sock_dgram(数据报的方式发送数据)第三个变量表示阻塞状态默认为 0最后如何是返回 -1 进行退出操作。 _sockfd socket(AF_INET, SOCK_DGRAM, 0);if (_sockfd -1){cerr socket error errno : strerror(errno) endl;exit(SOCKET_ERROR);} 使用 bind 函数进行绑定。 需要文件的描述符一个 sockaddr 的结构体sizeofsockaddr 的结构体。关键就是在于处理这个 sockaddr 我们使用的 sockaddr_in 然后进行类型的转化。最后我们使用的是先进行清零然后 第一个位置放上协议家族AF_INET, 第二位置放上 port 端口号需要使用 htonshost主机到net网络当中为 short 的 16 位的方式 ip 直接使用 inet_addr(将点分十进制转化位 32 位的整形然后变成网络当中的大端方式发送)。还需要注意的是由于 inet_addr 传递的字符串的指针所以是使用 c_str。整体的代码如下。 void initServe(){// 使用 socket 函数然后进行绑定_sockfd socket(AF_INET, SOCK_DGRAM, 0);if (_sockfd -1){cerr socket error errno : strerror(errno) endl;exit(SOCKET_ERROR);}// 进行band 绑定注意是使用结构体进行绑定struct sockaddr_in local;bzero(local, sizeof(local));local.sin_family AF_INET;local.sin_port htons(_port);local.sin_addr.s_addr inet_addr(_ip.c_str());// 设置好 addr_in 就去进行绑定int n bind(_sockfd, (struct sockaddr *)local, sizeof(local));if (n -1){cerr bind_error : strerror(errno) endl;exit(BIND_ERROR);}} 对于启动函数他本质就是一个无限的循环。  for(;;) 2. UdpSever.cc 就。是在运行的时候我们需要用户使用 ./ UdpSever port 如果不是就会提示如何使用。然后因为 argv[1] 使用的是字符串的方式直接 atoi 就可以转化位整型。然后就是智能指针的定义进行初始化以及启动函数。 #include udpServe.hpp #include memory #include unordered_mapusing namespace djx; static void Usage(std::string tmp) {std::cout Usage:\n tmp local_port\n\n; } int main(int argc, char* argv[]) {if(argc ! 2){//说明输入错误需要重新输入Usage(argv[0]);exit(IN_ERROR);}uint16_t port atoi(argv[1]);//然后需要启动定义好的 udpstd::unique_ptrudpServer usvr(new udpServer(port));usvr-initServe();usvr-start();return 0; } 最终实现的样式为这样已经成功运行了。 3. udpClient.hpp  跟udpSever是一样的都是4个函数接下来我将会一一介绍。 3.1 构造函数 这个构造函数就需要告诉你你要发送的服务器的ip地址以及 port 端口号。 所以定义如下 udpClient(uint16_t serveport, string serveip):_serveport(serveport),_serveip(serveip){} 3.2 init初始化函数 与udpSever一样都是使用socket然后使用bind。但是这个bind 不要们进行显示的绑定但是是需要进行绑定的。 为了保证独立性ip 与 port 由操作系统为我们进行提供。 void initClient(){//click 是实现服务端的传送数据_sockfd socket(AF_INET, SOCK_DGRAM, 0);if(_sockfd -1){cerr socket error errno : strerror(errno) endl;exit(2);}//进行绑定不要显示的进行绑定是操作系统会帮助我们进行生成随机独立唯一的一个 port} 3.3 run run就是运行函数使用函数接口 sendto 这个是一个输出型函数。是要将buf 缓冲里面的东西发送到 severip 和 severport 的 服务器当中所以需要使用 sockaddr_in 对于里面的内容进行初始化。然后是对于 buffer 内容的输入。是使用 string message 类型的来进行存放数据。 void run(){//需要使用函数 sendto, 但是在之前需要先获取到 secve 的ip 以及 portstruct sockaddr_in serve;serve.sin_family AF_INET;serve.sin_port htons(_serveport);serve.sin_addr.s_addr inet_addr(_serveip.c_str());while(1){string message;cin message;sendto(_sockfd, message.c_str(), sizeof(message), 0, (struct sockaddr*)serve, sizeof(serve));}} 4. udpClient.cc 与 Serve 类型都是先进行判断输入的argc 是为 3如果是就进行启动。不是就告诉你如何使用。 #include udpClient(fianll).hpp #include memory using namespace std; using namespace djx; static void Usage(std::string tmp) {cout Usage:\n\t tmp local_ip local_port\n\n; } int main(int argc, char* argv[]) {if(argc ! 3){Usage(argv[0]);exit(1);}uint16_t port atoi(argv[2]);string ip argv[1];std::unique_ptrudpClient uclick(new udpClient(port, ip));uclick-initClient();uclick-run();return 0; } 5. 对于  UdpSever.h 中run函数的实现 start 函数需要接受从客服端发来的信息通过之前启动的 sokce 以及 bind启动了 udp 协议。内核就会帮助我们对于定义的 struct scokaddr_in 进行内容的填充来自客户端发送过来的数据。里面需要的函数为 recvfrom 这是一个输入输出型参数。从  struct scokaddr_in 获取输入参数将参数输出到 buffer 这个缓存当中然后进行打印。 整体的实现如下其中 full 定义为 1024 个整形。然后 s 表示的是buffer 里面读取到的个数如果是小于0就表示没有数据直接结束此次循环。为了照顾计算机网络的数据严格传送的特点len 的长度需要定义为 socklen_t 。使用 char 的时候写入的大小是从 0 开始的所以是要sizeof -  1. void start(){char buffer[full]; for (;;){// 用来存放 哪个click发送来的数据struct sockaddr_in peer;socklen_t len sizeof(peer); // 为了照顾vecvfrom函数所以使用这个socken_t;ssize_t s recvfrom(_sockfd, buffer, sizeof(buffer) - 1, 0, (struct sockaddr *)peer, len);if (s 0){buffer[s] 0; string message buffer; // s表示获取到的长度string click_ip inet_ntoa(peer.sin_addr); // 直接就是从结构体变过来int click_port ntohs(peer.sin_port);cout click_ip [ click_port ]# message endl;}}} 6. 结尾 到此 udp 简单实现已经结束了还不是很全面因为我们是要得到数据然后实现相应的工作这里还没有实现功能就是实现了一个简陋的网络聊天室。任意一台主机通过输入./udpClient ip port, 我都可以在我的服务器上看见对应的信息。 以上是对于计算网络中基础知识的了解这个文章用于我的学习记录如果是有其他的错误还请批评指正。如果对你有帮助还请给我点个赞。
http://www.zqtcl.cn/news/964204/

相关文章:

  • 第一免费营销型网站一起做网店17
  • 高端学校网站建设做网站是怎么赚钱的
  • 哪里可以找人做网站在服务器上中的asp网站后台能输入帐号无法进入
  • 怎么网站关键词语有哪些
  • 网站建设 维护费用环球易购招聘网站建设
  • 怎么做网站官方电话手机应用开发平台
  • 济南企业免费建站剪辑视频怎么学
  • 手表网站免费设计上海做网站制作
  • 深圳网站seo优化课程设计做淘宝网站的目的
  • 机械网站建设中心莱芜论坛莱芜都市网
  • 58同城类似的网站怎么做seo做的比较好的公司
  • 厦门网站建设培训学校网站程序定制开发流程
  • 宣传旅游网站建设的观点是什么资阳网站建设方案
  • ui设计与网站建设怎么建设一个手机网站
  • 网站建设加推广优化网站移动端开发公司
  • 猪八戒网站开发电子商务公司取名字参考大全
  • 酒泉手机网站建设大连网站如何制作
  • 做网站点子免费做简历的软件网站
  • 刘涛做代言的那个网站设计与制作
  • 专业网站建站星辰wordpress主题
  • 淄博个人网站建设天津网站制作机玩法部
  • 帮人做图挣外快的网站seo优化教学视频
  • 做房产中介需要有内部网站吗烟台开发区网站建设
  • 网站资质优化网站备案密码使用
  • 廊坊营销网站团队网站推广报告
  • 商品网站模板多语言企业网站模板
  • 佛山网页制作设计东莞seo推广机构帖子
  • 公司网站开发费用如何入账网站开发与设计实训总结两千字
  • 生物网站模板在线crm厂商
  • 在线制作动画网站ps切图做网站