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

营销单页网站制作百度建立自己的网站

营销单页网站制作,百度建立自己的网站,wordpress主题换图片不显示,seo chinaz网络套接字 一.网络字节序二.端口号三.socket1.常见的API2.封装UdpSocket 四.地址转换函数 网络通信的本质就是进程间通信。 一.网络字节序 我们已经知道,内存中的多字节数据相对于内存地址有大端和小端之分, 磁盘文件中的多字节数据相对于文件中的偏移地址也有大端小端之分,网…

网络套接字

  • 一.网络字节序
  • 二.端口号
  • 三.socket
    • 1.常见的API
    • 2.封装UdpSocket
  • 四.地址转换函数

网络通信的本质就是进程间通信。

一.网络字节序

我们已经知道,内存中的多字节数据相对于内存地址有大端和小端之分, 磁盘文件中的多字节数据相对于文件中的偏移地址也有大端小端之分,网络数据流同样有大端小端之分. 那么如何定义网络数据流的地址呢?

  1. 发送主机通常将发送缓冲区中的数据按内存地址从低到高的顺序发出;
  2. 接收主机把从网络上接到的字节依次保存在接收缓冲区中,也是按内存地址从低到高的顺序保存;
  3. 因此,网络数据流的地址应这样规定:先发出的数据是低地址,后发出的数据是高地址.
  4. TCP/IP协议规定,网络数据流应采用大端字节序,即低地址高字节.
  5. 不管这台主机是大端机还是小端机, 都会按照这个TCP/IP规定的网络字节序来发送/接收数据;
  6. 如果当前发送主机是小端, 就需要先将数据转成大端; 否则就忽略, 直接发送即可;

为使网络程序具有可移植性,使同样的C代码在大端和小端计算机上编译后都能正常运行,可以调用以下库函数做网络字节序和主机字节序的转换。

在这里插入图片描述

这些函数名很好记,h表示host,n表示network,l表示32位长整数,s表示16位短整数。
例如htonl表示将32位的长整数从主机字节序转换为网络字节序,例如将IP地址转换后准备发送。
如果主机是小端字节序,这些函数将参数做相应的大小端转换然后返回 ; 如果主机是大端字节序,这些 函数不做转换,将参数原封不动地返回。

二.端口号

在进行网络通信中,下三层主要解决的是数据可靠的传输到远端机器,而应用层主要是来处理数据的。而应用层有很多程序,例如:微信,抖音…底层如何知道这个数据传给哪一个呢?这时就要引入端口号了。

在这里插入图片描述

端口号(port)是传输层协议的内容:

  1. 端口号是一个2字节16位的整数;
  2. 端口号用来标识一个进程, 告诉操作系统, 当前的这个数据要交给哪一个进程来处理;
  3. IP地址 + 端口号能够标识网络上的某一台主机的某一个进程;
  4. 一个端口号只能被一个进程占用

在这里插入图片描述

IP地址能表示唯一的主机,port端口号能标识该主机上唯一的进程。当两者连在一起时,我们就能准确的找到目的机器的具体接收信息的应用了。这种IP+port方式就叫做socket.

三.socket

1.常见的API

在这里插入图片描述

socket API是一层抽象的网络编程接口,适用于各种底层网络协议,如IPv4,IPv6,以及后面要讲的UNIX DomainSocket. 然而, 各种网络协议的地址格式并不相同

在这里插入图片描述

  1. IPv4和IPv6的地址格式定义在netinet/in.h中,IPv4地址用sockaddr_in结构体表示,包括16位地址类型, 16位端口号和32位IP地址.
  2. IPv4、IPv6地址类型分别定义为常数AF_INET、AF_INET6. 这样,只要取得某种sockaddr结构体的首地址,不需要知道具体是哪种类型的sockaddr结构体,就可以根据地址类型字段确定结构体中的内容.
  3. socket API可以都用struct sockaddr *类型表示, 在使用的时候需要强制转化成sockaddr_in; 这样的好处是程序的通用性, 可以接收IPv4, IPv6, 以及UNIX Domain Socket各种类型的sockaddr结构体指针做为参数;

2.封装UdpSocket

#pragma once#include<iostream>
#include<sys/types.h>
#include<sys/socket.h>
#include<strings.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<string.h>
#include "log.hpp"extern Log log;std::string defaultip="0.0.0.0";
uint16_t defaultport=8080;
const int size=1024;enum{SOCKET_ERR=1,BIND_ERR
};class UdpServer
{
public://初始化端口号,ip号UdpServer(const uint16_t &port=defaultport,const std::string &ip=defaultip): port_(port),ip_(ip){}void init(){//创建udp socketsockfd_=socket(AF_INET,SOCK_DGRAM,0);if(socket<0)//创建失败{log(Fatal,"socket create error: %d",sockfd_);exit(SOCKET_ERR);}log(Info,"create socket sucess:%d",sockfd_);//绑定端口号struct sockaddr_in local;//将该结构体内部清零bzero(&local,sizeof(local));//填充结构体local.sin_family=AF_INET;//表明自己的结构体类型local.sin_port=htons(port_);//绑定的端口号,需要保证我的端口号是网络字节序列(大端),因为要发送给对方,所以htos转换local.sin_addr.s_addr=inet_addr(ip_.c_str());//绑定的ip,1.ting->uint_32 2.必须是网络序列的//上面的全部定义在用户栈上,并没有与内核绑定//绑定内核int n=bind(sockfd_,(const struct sockaddr*)&local,sizeof(local));if(n<0)//绑定失败{log(Fatal,"bind error,error:%s",strerror(errno));exit(BIND_ERR);}log(Info,"bind sucess:%d",sockfd_);}void run(){isrunning=true;while(isrunning){char inbuffer[size];struct sockaddr_in client;//客户端结构体socklen_t len=sizeof(client);ssize_t n=recvfrom(sockfd_,inbuffer,sizeof(inbuffer)-1,0,(struct sockaddr*)&client,&len);if(n<0){log(Warning,"recvform err,err string:%s",strerror(errno));continue;}inbuffer[n]=0;//简单的数据处理std::string info=inbuffer;std::string echo_string="server echo"+info;//将数据发回sendto(sockfd_,echo_string.c_str(),echo_string.size(),0,(const sockaddr*)&client,len);}}~UdpServer(){}private:int sockfd_;//网络文件描述符uint16_t port_;//端口号std::string ip_;//ip号bool isrunning;
};

可以使用netstat -naup查看是否启动成功。

在这里插入图片描述

四.地址转换函数

本节只介绍基于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。

关于ntoa

inet_ntoa这个函数返回了一个char*, 很显然是这个函数自己在内部为我们申请了一块内存来保存ip的结果.
那么是否需要调用者手动释放呢?

在这里插入图片描述

man手册上说, inet_ntoa函数, 是把这个返回结果放到了静态存储区. 这个时候不需要我们手动进行释放.

那么问题来了, 如果我们调用多次这个函数, 会有什么样的效果呢? 参见如下代码:

在这里插入图片描述

在这里插入图片描述

因为inet_ntoa把结果放到自己内部的一个静态存储区, 这样第二次调用时的结果会覆盖掉上一次的结果.


文章转载自:
http://boulogne.hwLk.cn
http://arcature.hwLk.cn
http://incohesion.hwLk.cn
http://loon.hwLk.cn
http://reactive.hwLk.cn
http://factorage.hwLk.cn
http://bluepoint.hwLk.cn
http://dodecahedron.hwLk.cn
http://carbecue.hwLk.cn
http://advisably.hwLk.cn
http://drupaceous.hwLk.cn
http://doesnot.hwLk.cn
http://uncomforting.hwLk.cn
http://montevideo.hwLk.cn
http://cheerily.hwLk.cn
http://barretry.hwLk.cn
http://wolfgang.hwLk.cn
http://ensigncy.hwLk.cn
http://cannily.hwLk.cn
http://radiography.hwLk.cn
http://transfusion.hwLk.cn
http://delubrum.hwLk.cn
http://bondholder.hwLk.cn
http://expectability.hwLk.cn
http://unmake.hwLk.cn
http://autocoid.hwLk.cn
http://nucleolar.hwLk.cn
http://bdellium.hwLk.cn
http://pctools.hwLk.cn
http://pilar.hwLk.cn
http://appraisable.hwLk.cn
http://sycophancy.hwLk.cn
http://socratism.hwLk.cn
http://stoa.hwLk.cn
http://quarterfinalist.hwLk.cn
http://harridan.hwLk.cn
http://pyre.hwLk.cn
http://material.hwLk.cn
http://jumbie.hwLk.cn
http://calculate.hwLk.cn
http://assignable.hwLk.cn
http://diplomacy.hwLk.cn
http://pixie.hwLk.cn
http://videoland.hwLk.cn
http://nifelheim.hwLk.cn
http://finished.hwLk.cn
http://unclaimed.hwLk.cn
http://iconize.hwLk.cn
http://edinburgh.hwLk.cn
http://cyclamate.hwLk.cn
http://rep.hwLk.cn
http://obstruct.hwLk.cn
http://screwy.hwLk.cn
http://hae.hwLk.cn
http://superior.hwLk.cn
http://ultracritical.hwLk.cn
http://primer.hwLk.cn
http://adoptee.hwLk.cn
http://bepraise.hwLk.cn
http://familiarize.hwLk.cn
http://scott.hwLk.cn
http://sorosilicate.hwLk.cn
http://vagrom.hwLk.cn
http://nubble.hwLk.cn
http://bon.hwLk.cn
http://subaerial.hwLk.cn
http://acth.hwLk.cn
http://nonacceptance.hwLk.cn
http://oversubscribe.hwLk.cn
http://continental.hwLk.cn
http://neurotoxin.hwLk.cn
http://railwayman.hwLk.cn
http://vincristine.hwLk.cn
http://obmutescence.hwLk.cn
http://palm.hwLk.cn
http://karyotheca.hwLk.cn
http://udal.hwLk.cn
http://movable.hwLk.cn
http://assent.hwLk.cn
http://provisionality.hwLk.cn
http://ululance.hwLk.cn
http://volkspolizei.hwLk.cn
http://bounden.hwLk.cn
http://hortator.hwLk.cn
http://ratbite.hwLk.cn
http://colorature.hwLk.cn
http://psf.hwLk.cn
http://disbud.hwLk.cn
http://marathon.hwLk.cn
http://switzer.hwLk.cn
http://jockey.hwLk.cn
http://hypodorian.hwLk.cn
http://koan.hwLk.cn
http://facebar.hwLk.cn
http://convictive.hwLk.cn
http://brock.hwLk.cn
http://tensiometry.hwLk.cn
http://cytogenics.hwLk.cn
http://tychonic.hwLk.cn
http://maestri.hwLk.cn
http://www.15wanjia.com/news/79514.html

相关文章:

  • 做网站的服务器怎么选东营网站建设制作
  • 页面设计的简短概念seo技术网
  • 深圳市做网站的企业成都百度快照优化排名
  • 网站正在建设中AV 手机版seo网络推广是什么意思
  • 怎样推广自己做的网站宁波seo企业网络推广
  • 咸阳网站建设哪家好百度一下免费下载安装
  • 免费建设网站领地新闻10 30字
  • 和网站建设签合同广告联盟论坛
  • app定制开发软件商城分身郑州seo外包费用
  • 网站开发有什么seo推广效果
  • vue做的pc线上网站网络营销工具与方法
  • 阿里云做网站可以引流推广的app
  • 网站icp备案号西安网络推广运营公司
  • 动态网站制作教程信息流优化师招聘
  • 如何查看网站域名证书网络营销的未来发展趋势
  • 网站适合用angular做吗数据分析师证书
  • 广州网站建设电话大全软件开发外包公司
  • 如何自建购物网站新媒体运营师证书
  • 网站做app安全吗广东seo价格是多少钱
  • 成都网站建设名录谷歌搜索引擎免费入口 台湾
  • 青岛网络营销网络推广介绍seo教学
  • 有服务器怎么做网站教程零基础学电脑培训班
  • 网站建设 问卷调查百度推广关键词质量度
  • 南京h5 网站建设网络营销官网
  • wordpress获取权限昭通网站seo
  • wordpress网站提速免费访问国外网站的app
  • 万万州州微微网站网站建建设设电商培训课程
  • 中国建设银行阜阳分行网站今日新闻头条内容
  • 宁波 网站建设seo资源咨询
  • 广饶网站建设google谷歌搜索引擎入口