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

网站里的动画效果图衡水做网站

网站里的动画效果图,衡水做网站,WordPress子站站群,wordpress 答题计算机网络 —— 网络编程实操#xff08;UDP#xff09; 套接字端口套接字的定义为什么需要套接字#xff1f; 套接字的分类1. 按照通信协议分类2. 按照地址族#xff08;Address Family#xff09;分类3. 按照通信模式分类 socket APIsockaddr结构 使用接口套接字初始化… 计算机网络 —— 网络编程实操UDP 套接字端口套接字的定义为什么需要套接字 套接字的分类1. 按照通信协议分类2. 按照地址族Address Family分类3. 按照通信模式分类 socket APIsockaddr结构 使用接口套接字初始化socket函数 完成套接字的创建bind完成套接字的绑定htonsinet_addr 启动服务recvfrom 套接字 端口 我们知道我们进行网络通信的时候我们实际上是两个应用进程在进行通信那么这个过程是如何进行的呢每一个进程都会领到一个自己的端口号通过端口号来区分当数据包通过网络到达一台主机时目标IP地址将数据包导向正确的机器而目标端口号则帮助操作系统决定哪个正在运行的应用程序应该接收这个数据包。例如如果你访问一个网站你的浏览器会将HTTP请求发送到Web服务器的80端口如果是HTTP协议而Web服务器会监听该端口并处理传入的请求。 端口Port在网络通信中是指一个抽象的概念用来标识特定的进程或网络服务。它是传输层协议如TCP和UDP的一部分用于区分同一台计算机上的不同网络应用程序。 一些网络协议非常重要所以已经占用了一些端口号这些端口号为熟知端口号 20/21 FTP (File Transfer Protocol) - 用于文件传输的服务。20用于数据传输21用于命令控制。22 SSH (Secure Shell) - 用于安全登录远程计算机和执行命令。23 TELNET - 一种不安全的远程登录服务协议。25 SMTP (Simple Mail Transfer Protocol) - 用于发送电子邮件。53 DNS (Domain Name System) - 用于将域名解析为IP地址。67/68 DHCP (Dynamic Host Configuration Protocol) - 用于自动分配IP地址。67是服务器端口68是客户端口。69 TFTP (Trivial File Transfer Protocol) - 简单文件传输协议常用于网络启动。80 HTTP (Hypertext Transfer Protocol) - 用于访问网页的超文本传输协议。110 POP3 (Post Office Protocol version 3) - 用于接收电子邮件。123 NTP (Network Time Protocol) - 用于同步计算机的时钟。143 IMAP (Internet Message Access Protocol) - 另一个用于接收电子邮件的协议。161 SNMP (Simple Network Management Protocol) - 用于管理网络设备。443 HTTPS (HTTP Secure) - 安全版本的HTTP通过SSL/TLS加密通信。3306 MySQL Database - MySQL数据库服务器使用的端口。3389 RDP (Remote Desktop Protocol) - Windows远程桌面服务。5432 PostgreSQL Database - PostgreSQL数据库服务器使用的端口。8080 HTTP Alternate - 有时用作HTTP的备用端口尤其是在主HTTP端口被占用或受限的情况下。 上述端口是互联网工程任务组IETF和其他标准化组织推荐的标准端口。不过实际应用中可能会根据需要进行调整。例如在企业环境中出于安全考虑可能会更改默认端口以避免直接攻击。此外一些私有或内部服务也可能会选择未注册的高编号端口来运行。 剩下的端口号就是可以拿给用户使用的了这类端口号仅仅在客户程序运行的时候才会被启用所以又称为短暂端口号 那么套接字是什么呢 IP地址拼接上端口号构成套接字这样既可以知道数据包往哪里送也可以知道最终这个数据包要交给哪一个进程。 套接字Socket是计算机网络编程中的一个抽象概念它提供了一种机制允许不同计算机上的程序通过网络进行通信。套接字可以被认为是操作系统为应用程序提供的一个接口用于实现进程间通信IPC特别是跨越网络的通信。 套接字的定义 套接字是一种通信端点它包含了一个IP地址和一个端口号这两个信息共同标识了网络上的唯一服务。在实际操作中套接字是一组API函数这些函数让程序员能够创建、配置和管理网络连接并且发送和接收数据。套接字可以支持多种协议如TCP、UDP等。 为什么需要套接字 跨平台一致性套接字提供了一组标准的API使得编写网络程序时可以在不同的操作系统上保持代码的一致性。这意味着使用套接字编写的程序可以在Linux、Windows、macOS等多个平台上运行而不需要对网络层代码做大量的修改。 灵活性套接字提供了对底层网络协议的直接访问这使得开发者可以选择最适合其应用需求的协议例如TCP对于可靠传输UDP对于低延迟传输。此外还可以根据需要选择是否建立连接面向连接或无连接的服务。 进程间通信除了网络通信外套接字还可以用于同一台机器上的进程间通信。这种情况下通常使用UNIX域套接字它们比传统的TCP/UDP套接字更高效因为它们不需要通过网络堆栈。 资源管理套接字帮助管理有限的网络资源。例如服务器可以监听特定的端口以确保只有正确的客户端可以连接。同时套接字还提供了关闭不活跃连接的能力从而释放系统资源。 安全性通过设置套接字选项可以增强通信的安全性。例如可以配置SSL/TLS加密来保护敏感数据的传输。 并发处理套接字可以与多线程或多进程模型结合使用以实现高并发处理能力。比如Web服务器可以同时处理来自多个客户端的请求。 总之套接字是网络编程的核心组成部分它简化了开发人员构建网络应用程序的过程同时也保证了不同设备之间的互操作性和兼容性。 套接字的分类 套接字有许多分类 套接字Socket的类型主要由其通信协议和通信方式决定。以下是几种常见的套接字类型 1. 按照通信协议分类 流式套接字 (SOCK_STREAM)使用TCP协议提供面向连接、可靠的数据传输服务。数据按顺序无差错地传输确保数据的完整性和顺序性。适用于需要保证数据传输可靠性的情况如HTTP、HTTPS、FTP等。 数据报套接字 (SOCK_DGRAM)使用UDP协议提供无连接、不可靠的数据报服务。数据以独立的数据包形式发送不保证到达顺序或是否丢失。适用于对实时性要求较高而对可靠性要求相对较低的应用如视频会议、在线游戏等。 原始套接字 (SOCK_RAW)允许直接访问底层网络协议如IP、ICMP等。开发者可以构建自己的协议头通常用于实现特殊的网络工具或诊断程序如ping命令。需要特殊权限才能创建并且不是所有操作系统都支持。 2. 按照地址族Address Family分类 因特网套接字 (AF_INET 或 PF_INET)使用IPv4地址格式是Internet上最常用的套接字类型。 因特网6套接字 (AF_INET6 或 PF_INET6)使用IPv6地址格式随着IPv6的逐渐普及而变得越来越重要。 UNIX域套接字 (AF_UNIX 或 PF_UNIX)也称为本地套接字只在同一台机器上的进程间通信中使用。因为不需要通过网络层所以比因特网套接字更快更高效。支持流式套接字和数据报套接字两种模式。 3. 按照通信模式分类 面向连接的套接字在两个端点之间建立连接后才开始数据交换类似于电话通话前先拨号建立连接。流式套接字通常是面向连接的。 无连接的套接字不需要事先建立连接就可以发送数据更像是邮寄信件发送方不知道接收方是否存在。数据报套接字是无连接的。 选择合适的套接字类型取决于应用程序的需求包括但不限于性能、可靠性、安全性等因素。在实际开发过程中开发者会根据具体应用场景来决定使用哪种类型的套接字。 socket API 在Linux中进行网络编程时主要使用的是套接字socketAPI。以下是与相关的常用接口函数 socket() - 创建一个套接字。 int socket(int domain, int type, int protocol);bind() - 将地址信息IP地址和端口号绑定到套接字。 int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);sendto() - 向指定的地址发送数据适用于无连接的UDP。 ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,const struct sockaddr *dest_addr, socklen_t addrlen);recvfrom() - 接收来自任何发送方的数据并可获取发送方的地址。 ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,struct sockaddr *src_addr, socklen_t *addrlen);connect() - 对于UDP来说可以将套接字与特定的对等体地址关联起来这样后续就可以使用send()和recv()了。 int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);send() - 如果UDP套接字已经通过connect()绑定了对等体地址则可以直接使用此函数发送数据。 ssize_t send(int sockfd, const void *buf, size_t len, int flags);recv() - 如果UDP套接字已经通过connect()绑定了对等体地址则可以直接使用此函数接收数据。 ssize_t recv(int sockfd, void *buf, size_t len, int flags);close() - 关闭套接字。 int close(int sockfd);getsockname() - 获取套接字自身的名称即本地地址。 int getsockname(int sockfd, struct sockaddr *addr, socklen_t *addrlen);getpeername() - 获取对等体的地址对于UDP来说只有在调用connect()之后才有意义。 int getpeername(int sockfd, struct sockaddr *addr, socklen_t *addrlen);setsockopt() 和 getsockopt() - 分别设置和获取套接字选项。 int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen); int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen);这些接口提供了基本的UDP通信功能包括创建套接字、绑定地址、发送和接收数据报以及关闭连接。在实际编程中还需要处理错误检查和其他可能需要的功能例如非阻塞I/O、多播等。 sockaddr结构 socket API是一层抽象的网络编程接口,适用于各种底层网络协议,如IPv4、IPv6,以及后面要讲的UNIX DomainSocket. 然而, 各种网络协议的地址格式并不相同 其中我们的IPV4和IPV6使用struct sockaddr_inunix使用struct sockaddr_un在使用这些接口时都要强转为struct sockaddr类型这里要注意。 我们今天来简单使用一下这些接口首先我们先准备一些工作把对应的类写好 使用接口 我们先把一些基本的类写好我们这次写一个UDP的服务端 #pragma once #includeiostream #includecstdintconst static std::string defaultip 0.0.0.0; const static uint16_t defaultport 8888;class UdpSever {public://构造函数UdpSever(const std::string ip ,const uint16_t port defaultport):_ip(ip),_port(port){//如果初始化成功后打印一下信息std::cout Success create std::endl;std::cout ip address is _ip std::endl;std::cout port number is _port std::endl;}//初始化服务void Init(){}//开启服务void Start(){}//析构函数~UdpSever(){}private://套接字的定义IP端口号std::string _ip; //IP地址uint16_t _port; //端口号占16位使用无符号16位整型}; #includeUdpSever.hpp #includememoryint main() {//智能指针std::unique_ptrUdpSever usvr std::make_uniqueUdpSever(0.0.0.0);usvr-Init();usvr-Start();return 0; }如果成功显示一下结果 我们写了这么多还没有用到网络接口只是把准备工作做好如果不想实现赋值拷贝我们还可以写一个类禁止拷贝 #pragma once#includeiostreamclass nocopy {public:nocpoy(){}nocopy(const nocopy) delete;const nocopy operator (const nocopy) delete;~nocopy(){}private: };套接字初始化 socket函数 完成套接字的创建 我们先完成套接字的初始化这个要用到函数socket函数 这个函数接受三个参数地址族address family、套接字类型socket type以及协议protocol 第一个参数是地址族手册里面告诉我们了有哪些地址族 我们一般使用的是IPV4所以第一个参数设置为AF_INET。 第二个是套接字的类型这个嘛就是面向流还是面向报文手册里面也解释的很清楚了 UDP是面向数据报的所以我们使用SOCK_DGRAM 第三个参数为 protocol 一般情况下默认为0但是如果出现多个协议使用同一种套接字这个值就不再是0但是我们这里不会有这种情况所以默认为0 我们看一下返回值 如果成功一个文件描述符会被返回否则置为1一开始的UdpSever类中还要增添一个socketfd用来接收创建之后文件描述符的值 bind完成套接字的绑定 创建好了套接字之后就要把IP和端口号进行绑定我们有专门的函数来完成这个工作bind 这个绑定要用专门的结构体来做struct sockaddr_in 我们转到它的定义 注意一下我们要使用sockaddr_in一般我们要包含这几个文件 sockaddr_in 结构体定义在头文件 netinet/in.h 中。这个结构体用于表示互联网协议IP族的套接字地址通常与IPv4一起使用。 为了确保兼容性和完整性通常还会包含其他相关的头文件如 sys/socket.h 和 arpa/inet.h这些头文件提供了创建和操作套接字所需的功能。以下是一个完整的头文件包含列表当你需要使用 sockaddr_in 时可以参考 包含完成之后我们就可以对结构体进行初始化 但是这里还有一个问题我们这里的_port和_ip都是字符串和整数不是网络的可传输的形式所以我们要有办法序列化这些信息我们接口有提供这些函数 htons htons 是 C 语言中的一个网络字节序转换函数全称为 “Host to Network Short”。它的作用是将主机字节序通常是小端或大端的16位无符号短整数转换为网络字节序大端。网络字节序在网络通信中使用以确保不同字节序的计算机之间能够正确地交换数据。 在大多数现代计算机系统上CPU 使用的是小端字节序例如 x86 架构而网络协议规定了所有在网络上发送的数据都必须使用大端字节序。因此在发送数据之前需要使用 htons 函数将本地表示的数字转换为网络字节序接收数据后则可能需要使用 ntohs 函数将网络字节序转换回主机字节序。 inet_addr inet_addr 是 C 语言中的一个函数用于将互联网标准点分十进制表示的 IPv4 地址字符串例如 “192.168.1.1”转换为网络字节序的二进制形式。该函数定义在头文件 arpa/inet.h 中。 所以我们应该这样写 接下来才可以绑定 启动服务 我们完成套接字的绑定之后就可以启动服务了这里我们可以接受发过来的信息 recvfrom recvfrom 是一个用于接收来自UDP套接字的数据报的系统调用。它也可以被用来接收TCP、UNIX域套接字等其他类型的数据但在UDP上下文中最为常见。recvfrom 允许应用程序接收数据并获取发送方的地址信息。 函数原型如下 #include sys/types.h #include sys/socket.hssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,struct sockaddr *src_addr, socklen_t *addrlen);sockfd这是你要从中接收数据的套接字描述符。buf这是一个指向缓冲区的指针接收的数据将被存储在这里。len这是缓冲区的最大长度以字节为单位指示可以接收的最大数据量。flags这是一组标志位用于修改接收操作的行为。常用的标志包括 MSG_PEEK预览消息但不将其从队列中移除、MSG_WAITALL等待直到接收到所有请求的数据等。src_addr这是一个指向 struct sockaddr 类型结构体的指针该结构体用于存储发送方的地址信息。如果不需要知道发送方地址可以将其设置为 NULL。addrlen这是一个指向 socklen_t 类型变量的指针初始时应包含 src_addr 结构体的大小。在成功返回时它会被更新为实际填入 src_addr 的地址长度。 recvfrom 返回接收到的字节数如果值为0可能表示连接已经关闭对于面向连接的协议如TCP。如果发生错误则返回 -1 并设置 errno 以指示错误类型。 我们启动服务之后只要我们不干涉服务就会一直运行所以我们可以用一个死循环 //开启服务void Start(){char buffer[1024]; //缓冲区struct sockaddr_in peer;socklen_t len sizeof(peer);ssize_t n recvfrom(_socketfd,buffer,sizeof(buffer)-1,0,(struct sockaddr*)peer,len);for(;;){buffer[n] 0;std::cout Client say# buffer std::endl;}} 我们可以用netstat -aup来查看我们端口号的情况
http://www.hkea.cn/news/14330420/

相关文章:

  • 自己怎么做云购网站吗东道设计公司logo含义
  • 网站新闻百度收录搜狐最大的门户网站
  • 河南省建设厅网站网站微信支付开发
  • WordPress有客户端么seo外贸网站
  • 企业网站怎么做推广比较好网站开发时自适应
  • 网站后台系统使用外贸企业网络推广
  • 备案价公示网站京icp备案证号查询
  • 绍兴网站建设方案策划亚马逊网站开发者平台
  • 商城系统网站模板淄博做网站建设
  • 做网站需要什么配置网站开发 天津
  • 个网站能申请贝宝支付接口施工企业研发资金投入情况说明
  • 网站开发证湛江网站建设皆选小罗23
  • 台州网站制作系统分析怎么写哈尔滨建站哪个好
  • 免费表白网站制作网站开发得多少钱
  • flv网站建设wordpress json 插件
  • 电商网站设计图百度一下生活更好
  • 现在海外做的比较好一点的网站有哪些做网站优化的公司
  • 大型国企网站建设费用wordpress vps 安装
  • 怎样将整个网站小程序开发平台软件
  • 简述建设网站的具体步骤垂直网站建设
  • 南昌网站设计怎么选项目建设内容及规模怎么写
  • 网站开发工具最好用wordpress 注册填密码
  • 建设一个网站多少钱wordpress默认播放器怎么用
  • 织梦网站怎么做301wordpress学人的冬天
  • 自己做网站投放广告成都创业平台
  • 中国网站开发公司排名广州住房建设部网站
  • 招聘网站建设价格网页设计100个方法
  • 京山网站建设宠物医院网站开发背景
  • 泉州模板建站公司wordpress xampp 本地 慢
  • 海口会计报名网站克隆网站首页做单页站几个文件夹