外贸网站建设报价正规网站建设公司在哪里

web/2025/10/4 19:15:45/文章来源:
外贸网站建设报价,正规网站建设公司在哪里,网站页面设计怎么收费,网络服务费税收分类编码1.预备知识 认识端口号 端口号(port)是传输层协议的内容#xff1a; 端口号是一个2字节16位的整数(uint16)端口号用来标识主机上的一个进程IP地址port能够标识网络上的某一台主机和某一个进程一个端口号只能被一个进程占用 认识TCP协议 此处我们先对TCP(Transmission Con…1.预备知识 认识端口号 端口号(port)是传输层协议的内容 端口号是一个2字节16位的整数(uint16)端口号用来标识主机上的一个进程IP地址port能够标识网络上的某一台主机和某一个进程一个端口号只能被一个进程占用 认识TCP协议 此处我们先对TCP(Transmission Control Protocol 传输控制协议) 有一个直观的认识后面再详细讨论TCP的一些细节问题。 传输层协议有连接可靠性传输面向字节流 认识UDP协议 此处我们也是对UDP(User Datagram Protocol 用户数据报协议)有一个直观的认识后面再详细讨论。 传输层协议无连接不可靠性传输面向数据报 网络字节序 内存中的多字节数据相比于内存地址有大端和小端之分磁盘文件中的多字节数据相比于文件中的偏移地址也有大端小端之分网络数据流同样有大端和小端之分那么如何定义网络数据流的地址呢 发送主机通常将发送缓冲区中的数据按照内存地址从低到高顺序发出接受主机把从网络上接到的字节序依次保存在接收缓冲区也是按照内存地址从低到高的顺序保存因此网络数据流的地址应该这样规定先发出的数据是低地址后发出的数据是高地址TCP/UDP协议规定网络数据流应该采用大端字节序即低地址高字节不管这台主机是大端机还是小端机都会按照这个TCP/UDP规定的网络字节序来发送/接收数据如果当前发送主机是小端就需要先将数据转成大端否则就忽略直接发送即可 存储在内存中的数据有大端和小端之分低位存储在低地址的是小端低位存储在高地址的是大端。 为了使网络程序具有可移植性使同样的C代码在大端和小端计算机上编译后都能正常的运行可以调用以下库函数做网络字节序和主机字节序的转换。 #include arpa/inet.h uint32_t htonl(unit32_t hostlong); uint16_t htons(unit16_t hostshort); uint32_t ntohl(uint32_t netlong); uint16_t ntohs(uint16_t netshort);这些函数名很好记h表示hostn表示networkl表示32位长整数s表示16位短整数例如htonl 表示将32位长整数从主机字节序转换为网络字节序例如将IP地址转换后准备发送如果主机是小端字节序这些函数将参数做相应的大小端进行转换然后返回如果主机是大端字节序这些函数不做转换将参数原封不动的返回 2.socket编程接口 socket常见API // 创建 socket 文件描述符 (TCP/UDP, 客户端 服务器) int socket(int domain, int type, int protocol); // 绑定端口号 (TCP/UDP, 服务器) int bind(int socket, const struct sockaddr *address, socklen_t address_len); // 开始监听socket (TCP, 服务器) int listen(int socket, int backlog); // 接收请求 (TCP, 服务器) int accept(int socket, struct sockaddr* address, socklen_t* address_len); // 建立连接 (TCP, 客户端) int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);sockaddr结构 sockaddr是通用的网络接口网络通信中经常使用到的是struct sockaddr_in。 IPv4和IPv6的地址格式定义在netinet/in.h中IPv4地址用sockaddr_in 结构体表示包含16位地址类型16位端口号和32位IP地址IPv4和IPv6地址类型分别定义为常数AF_INET、AF_INET6这样主要取得某种sockaddr结构体的首地址不需要知道具体是哪种类型的sockaddr结构体就可以根据地址类型字段确定结构体中的内容sock API可以都用struct sockaddr*类型表示在使用的时候需要强制转化成sockaddr_in这样的好处是程序的通用性可以接收IPv4IPv6以及UNIX Domain Socket各种类型的sockaddr结构体指针作为参数 sockaddr结构 sockaddr_in结构 虽然socket api的接口是sockaddr但是真正在基于IPv4编程时使用的数据结构是sockaddr_in这个结构里主要有三部分信息地址类型端口号IP地址。 in_addr结构 in_addr用来表示一个IPv4的IP地址其实就是一个32位的整数 3.简单的UDP网络程序 实现一个简单的英译汉功能 封装UdpSocket udp_socket.hpp #pragma once #include stdio.h #include string.h #include stdlib.h #include cassert #include string #include unistd.h #include sys/socket.h #include sys/types.h #include netinet/in.h #include arpa/inet.hclass UdpSocket { public:UdpSocket() : fd_(-1){}bool Socket(){fd_ socket(AF_INET, SOCK_DGRAM, 0);if (fd_ 0){perror(socket);return false; //创建套接字失败}return true;}bool Close(){close(fd_); //关闭套接字return true;}bool Bind(const std::string ip, uint16_t port){sockaddr_in addr; //用于网络传输addr.sin_family AF_INET; //地址类型-网络addr.sin_addr.s_addr inet_addr(ip.c_str());addr.sin_port htons(port);int ret bind(fd_, (sockaddr *)addr, sizeof(addr));if (ret 0){perror(bind);return false; //绑定失败}return true;}bool RecvFrom(std::string *buf, std::string *ip NULL, uint16_t *port NULL){char tmp[1024 * 10] {0};sockaddr_in peer;socklen_t len sizeof(peer);ssize_t read_size recvfrom(fd_, tmp,sizeof(tmp) - 1, 0, (sockaddr *)peer, len);if (read_size 0){perror(recvfrom);return false;}// 将读到的缓冲区内容放到输出参数中buf-assign(tmp, read_size);if (ip ! NULL){*ip inet_ntoa(peer.sin_addr);}if (port ! NULL){*port ntohs(peer.sin_port);}return true;}bool SendTo(const std::string buf, const std::string ip, uint16_t port){sockaddr_in addr;addr.sin_family AF_INET;addr.sin_addr.s_addr inet_addr(ip.c_str());addr.sin_port htons(port);ssize_t write_size sendto(fd_, buf.data(), buf.size(), 0, (sockaddr *)addr, sizeof(addr));if (write_size 0){perror(sendto);return false;}return true;}private: //socket函数是实现网络通信的重要工具用于创建、绑定、监听、连接和关闭套接字以及发送和接收数据。int fd_; };udp通用服务器 #pragma once #include udp_socket.hpp// C 式写法 // typedef void (*Handler)(const std::string req, std::string* resp); // C 11 式写法, 能够兼容函数指针, 仿函数, 和 lamda #include functional typedef std::functionvoid(const std::string , std::string *resp) Handler; class UdpServer { public:UdpServer(){assert(sock_.Socket());}~UdpServer(){sock_.Close();}bool Start(const std::string ip, uint16_t port, Handler handler){// 1. 创建 socket// 2. 绑定端口号bool ret sock_.Bind(ip, port);if (!ret){return false;}// 3. 进入事件循环for (;;){// 4. 尝试读取请求std::string req;std::string remote_ip;uint16_t remote_port 0;bool ret sock_.RecvFrom(req, remote_ip, remote_port);if (!ret){continue;}std::string resp;// 5. 根据请求计算响应handler(req, resp);// 6. 返回响应给客户端sock_.SendTo(resp, remote_ip, remote_port);printf([%s:%d] req: %s, resp: %s\n, remote_ip.c_str(), remote_port,req.c_str(), resp.c_str());}sock_.Close();return true;}private:UdpSocket sock_; };实现英译汉服务器 以上代码是对udp服务器进行通用接口的封装基于以上封装实现一个查字典的服务器就很容易了 dict_server.cc #include udp_server.hpp #include unordered_map #include iostreamstd::unordered_mapstd::string, std::string g_dict; void Translate(const std::string req, std::string *resp) {auto it g_dict.find(req);if (it g_dict.end()){*resp 未查到!;return;}*resp it-second; } int main(int argc, char *argv[]) {if (argc ! 3){printf(Usage ./dict_server [ip] [port]\n);return 1;}// 1. 数据初始化g_dict.insert(std::make_pair(hello, 你好));g_dict.insert(std::make_pair(world, 世界));g_dict.insert(std::make_pair(c, 最好的编程语言));// 2. 启动服务器UdpServer server;server.Start(argv[1], atoi(argv[2]), Translate);return 0; }UDP通用客户端 udp_client.hpp #pragma once #include udp_socket.hpp class UdpClient { public:UdpClient(const std::string ip, uint16_t port) : ip_(ip), port_(port){assert(sock_.Socket());}~UdpClient(){sock_.Close();}bool RecvFrom(std::string *buf){return sock_.RecvFrom(buf);}bool SendTo(const std::string buf){return sock_.SendTo(buf, ip_, port_);}private:UdpSocket sock_;// 服务器端的 IP 和 端口号std::string ip_;uint16_t port_; };实现英译汉客户端 dict_client.cpp #include udp_client.hpp #include iostream int main(int argc, char *argv[]) {if (argc ! 3){printf(Usage ./dict_client [ip] [port]\n);return 1;}UdpClient client(argv[1], atoi(argv[2]));for (;;){std::string word;std::cout 请输入您要查的单词: ;std::cin word;if (!std::cin){std::cout Good Bye std::endl;break;}client.SendTo(word);std::string result;client.RecvFrom(result);std::cout word 意思是 result std::endl;}return 0; }4.地址转换函数 基于IPv4的socket网络编程sockaddr_in中的成员struct in_addr sin_addr表示32位的IP地址但是我们通常用点分十进制的字符串表示IP地址以下函数可以在字符串表示和in_addr表示之间进行转换 字符串转in_addr函数 in_addr转字符串的函数 其实inet_pton和inet_ntop不仅可以转换IPv4的in_addr还可以转换IPv6的in6_addr因此函数接口是void* addrptr。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/86940.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站建设 八羊某班级网站建设方案论文

9.写出float x 与“零值”比较的if语句。 if(x > 0.000001 && x < -0.000001) 权重&#xff1a;高 备注&#xff1a;实际编程时要注意 12、已知一个数组table&#xff0c;用一个宏定义&#xff0c;求出数据的元素个数。 参考答案&#xff1a; #define NTBL (size…

做山西杂粮的网站网站建设完整步骤

每天那么多的工作&#xff0c;总喜欢写一些Tips提醒自己。但是如果全部都写在小纸条上&#xff0c;贴在电脑边上&#xff0c;每日身边飞扬着无数小纸条&#xff0c;实在是太讨厌啦&#xff01;这时候&#xff0c;不妨试试一款电脑桌面便签软件——小鱼便签&#xff0c;让你的办…

爱游戏app下载官方网站清远网站设计公司

前言:用CAP有一段时间了,这里简单记录一下,这么好用的东西,小伙伴们赶紧上车吧一.CAP使用场景?平时工作中经常使用到MQ,如(kafka,rabbitmq...),用来简单的发布/订阅,经常会遇到以下几个问题常用方案,把SQL放前面,MQ放后面,MQ执行失败了,我们把整个SQL进行回滚,这种方案在单应用…

西安网站设计 牛人网络ppt设计怎么赚钱

文章目录 TCP重传机制详解——02 SACKSACK是什么&#xff1f;为什么要有SACK&#xff1f;实际场景抓包具体显示信息流程 实战抓包讲解SACK关闭场景下&#xff0c;三次重复ACK后会快速重传SACK打开但是不携带SACK块信息场景下&#xff0c;三次重复ACK也不会快速重传SACK打开并且…

手机网站开发公司哪家最专业wordpress 文章数量

主要问题参考&#xff1a;http://blog.csdn.net/daven172/article/details/45769129 这篇博客。 我们进入opencv内部函数进行调试&#xff0c;主要是设置断点&#xff0c;然后按下F11键&#xff0c;VS2013编译器会自动跳转到opencv内部的函数。 如果我们进入内部的函数&#xf…

在线教育网站开发实例爱网站无法登录怎么回事

hi&#xff0c;大家好&#xff0c;今天开始我们来介绍一下对称加密算法中的AES算法。 AES简介 AES&#xff08;英语&#xff1a;Advanced Encryption Standard&#xff0c;缩写&#xff1a;AES&#xff09;&#xff0c;即高级加密标准&#xff0c;在密码学中又称Rijndael加密…

在线教学网站建设个人博客网页制作图片

ARC就是圆弧走线的意思&#xff1a; 仅打开网络的话可以只针对net进行修改走线的属性&#xff1a; 然后现在鼠标左键点那个走线&#xff0c;那个走线就会变为弧形&#xff1a; 添加差分对&#xff1a; 之后&#xff0c;分别点击两条线即可分配差分对&#xff1a; 选完差分对之后…

蛋糕公司网页设计模板网站关键词优化难不难

高考中&#xff0c;向量小题常从以下几个方面来考查&#xff1a;1、平面向量的有关概念与平面向量的线性运算&#xff0c;主要考查向量的加法、减法运算&#xff0c;考查向量的数乘运算及其几何意义。2、考查平面向量的坐标&#xff1a;主要考查平面向量基本定理及其意义&#…

wordpress 站群模板wordpress插件有api吗

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》&#xff1a;python零基础入门学习 《python运维脚本》&#xff1a; python运维脚本实践 《shell》&#xff1a;shell学习 《terraform》持续更新中&#xff1a;terraform_Aws学习零基础入门到最佳实战 《k8…

网站推广策划的流程深圳招聘官网

Spock是一个Java测试框架&#xff0c;由GradleWare的软件工程师Peter Niederwieser于2008年创建&#xff0c;它可以促进BDD的发展。 利用这个 例如 &#xff0c;一个故事可以定义为&#xff1a; Story: Returns go to stockAs a store owner In order to keep track of stock…

广州制作网站seowordpress 页面评论 调用

引言 随着互联网的发展和智能设备的普及&#xff0c;Web应用成为了主流的应用开发方式之一。然而&#xff0c;有些场景下仍然需要使用桌面应用来满足特定的需求。为了结合Web技术和桌面应用的优势&#xff0c;Golang提供了一种名为"WebView"的库&#xff0c;它可以帮…

机械配件东莞网站建设网站的尾页要怎么做

黑马程序员前端AJAX入门到实战全套教程&#xff0c;包含学前端框架必会的&#xff08;ajaxnode.jswebpackgit&#xff09;&#xff0c;一套全覆盖 Day1 你好,我是Qiuner. 为帮助别人少走弯路和记录自己编程学习过程而写博客 这是我的 github https://github.com/Qiuner ⭐️ ​…

兰州网站优化seo网站开发 语音输入

文章目录 前言1 字符串类型的数据结构组成2 为什么要这么设计数据结构&#xff1f;3 为什么说字符串类型不可修改&#xff1f;4 如何实现字符串的修改&#xff1f;5 为什么字符串修改的字面量用单引号&#xff1f;6 如何判断字符串的修改新建了一个字符串&#xff1f;7 字符串的…

织梦手机网站模板每天做任务得钱的网站

2019独角兽企业重金招聘Python工程师标准>>> 续前文装好chrome后&#xff0c;yum居然用不了&#xff0c;提示错误“Basic XLib functionality test failed!” 呵呵。。。呵呵了.... 【题外话~个人真心觉得pythonseleniumchrome在linux环境下开发和使用 简直蛋疼无比…

免费建站源码无极网

2019独角兽企业重金招聘Python工程师标准>>> 这个异常有下面几种情况 1、你写的 EL 表达式有语法错误。 2、再者就是你取得变量是多级的话比如 student.address.prevince 属性model 关联有问题。 3、还有就是你取得值为空&#xff08;null&#xff09; 比如 Thymel…

泰州网站设计公司国外做美食视频网站

以前出差时在机场用过无线网络&#xff0c;小区内是否也有无线网络呢&#xff1f;随便一搜&#xff0c;果然有几个无线网络信号&#xff0c;于是打起了免费蹭网的主意&#xff0c;但信号最好的几个网络的WEP或WPA密码成为了一个门坎&#xff0c;于是在公司上网查到相关资料&…

会员网站模板wordpress手机app主题

https://leetcode.cn/problems/binary-tree-preorder-traversal/ 这道题目需要我们自行进行创建一个数组&#xff0c;题目也给出我们需要自己malloc一个数组来存放&#xff0c;这样能达到我们遍历的效果&#xff0c;我们来看看他的接口函数给的是什么。 可以看到的是这个接口函…

国内外高校门户网站建设的成功经验与特色分析wordpress 极简博客

目录 1.初识MQ1.1.同步调用1.2.异步调用1.3.技术选型 2.RabbitMQ2.1.安装2.2.收发消息2.2.1.交换机2.2.2.队列2.2.3.绑定关系2.2.4.发送消息 2.3.数据隔离2.3.1.用户管理2.3.2.virtual host 1.初识MQ 1.1.同步调用 之前说过&#xff0c;我们现在基于OpenFeign的调用都属于是同…

网站开发与应用 大作业作业如何评价小米的网站建设

数据的安全性是至关重要的&#xff0c;任何数据的丢失都可能产生严重的后果。轻则程序逻辑出现BUG&#xff0c;重则程序崩溃&#xff0c;数据丢失。造成数据丢失的原因&#xff0c;主要有程序错误、人为错误、计算机失败、磁盘失败、灾难(如起火、地震)和偷窃。数据库日常备份工…

高网站建设网站开发环境分析

目录 &#x1f337;1、JVM是什么&#xff1f; &#x1f337;2、JVM的执行流程&#xff08;能够描述数据区5部分&#xff09; &#x1f337;3、JVM类加载过程 &#x1f337;4、双亲委派机制&#xff1a;描述类加载的过程 问题1&#xff1a;类加载器 问题2&#xff1a;什么…