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

珠海十大网站建设公司家具展示网站源码

珠海十大网站建设公司,家具展示网站源码,关于网站建设的总结,运营者邮箱怎么注册文章目录 Socket 编程基本概念Socket背景Socket 为了解决什么问题 socketsockaddr结构sockaddrsockaddr_insockaddr 和 sockaddr_in 的关系sockaddr_un 示例代码 #x1f396; 博主的CSDN主页#xff1a;Ryan.Alaskan Malamute #x1f4dc; 博主的代码仓库主页 [ Gitee ]  博主的CSDN主页Ryan.Alaskan Malamute 博主的代码仓库主页 [ Gitee ]ryanala      [GitHub] Ryan-Ala Socket 编程 基本概念 Socket背景 Socket套接字是一种用于实现网络通信的编程接口API它提供了一种标准化的方式使得不同操作系统和编程语言之间的应用程序能够相互通信。Socket最初是在BSDBerkeley Software Distribution操作系统中开发出来的目的是为了实现在不同主机之间进行进程间通信。BSD是由加州大学伯克利分校开发的一个Unix操作系统的分支它对Socket的定义和实现成为了事实上的标准。后来由于互联网的发展Socket被广泛应用于网络编程中。 在早期的计算机网络中通信使用的是不同的协议这些协议之间缺乏标准化的接口使得应用程序的编写和移植变得非常困难。为了解决这个问题一些计算机科学家开始研究如何定义一种标准的通信接口以便不同的计算机之间能够进行通信。Socket就是在这个背景下诞生的它提供了一种可移植、可扩展、易于使用的接口使得应用程序能够在不同的操作系统和计算机之间进行通信。 随着互联网的发展Socket成为了网络编程中不可或缺的一部分。它被广泛应用于各种网络应用程序中如Web服务器、电子邮件客户端、聊天程序等。同时随着计算机硬件和网络技术的不断发展Socket也不断更新和完善以适应新的应用场景和需求。 Socket 为了解决什么问题 Socket通信主要是为了解决计算机网络中的进程间通信问题。在网络编程中有两个进程需要进行通信才能完成特定的任务这两个进程可能运行在不同的计算机上也可能运行在同一台计算机上的不同进程中。Socket提供了一种标准化的接口使得这些进程能够在网络中进行数据交换和通信。具体来说Socket通信可以解决以下几个方面的问题 进程间通信在同一台计算机上不同的进程之间需要进行通信Socket提供了一种标准化的接口使得进程之间可以通过网络进行通信。跨平台通信不同的计算机、操作系统和编程语言之间需要进行通信Socket提供了一种可移植的接口使得应用程序可以在不同的平台上运行并进行通信。网络通信安全性网络通信中存在着信息泄露、数据篡改、拒绝服务攻击等安全问题Socket可以通过加密、身份认证、防火墙等方式提高通信的安全性。通信协议Socket提供了一种灵活的通信协议可以根据需要选择不同的协议来满足特定的通信需求如TCP、UDP等协议。 总之Socket通信可以为应用程序提供一种标准化、可靠、安全的网络通信方式使得不同计算机之间的应用程序可以进行数据交换、信息共享和远程控制等操作。 简单来说 socket编程也叫套接字编程,应用程序可以通过它发送或者接受数据,可对其像打开文件一样打开、关闭、读写等操作.套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信.网络套接字是IP地址与端口号TCP协议的组合Socket就是为网络编程提供的一种机制,通信的两端都有Socket网络通信其实就是Socket之间的通信,数据在两个Socket之间通过I/O进行传输. socket Socket 编程需要包含如下头文件 #includesys/types.h #includesys/socket.h函数原型 int socket(int domain, int type, int protocol); // 2:46:00 //创建套接字就可以理解为创建了struct file对象其中包含了很多文件指针 // 该函数返回一个文件指针套接字文件描述符即代表socket函数创建的套接字文件// 使用示例:_sockfd socket(AF_INET, SOCK_DGRAM, 0); // 创建一个网络通信的文件 if (_sockfd 0) {// 如果错误就打印日志lg.LogMessage(Fatal, socket error, %d : %s \n, errno, strerror(errno));exit(Socket_Err); }domain 常用的三种阈 名称含义AF_UNIX用于本地进程间的通信AF_INET,PF_INETIPv4 Internet协议PF_INET6IPv6 Internet协议 AF表示ADDRESS FAMILY 地址族 地址族就是一个协议族所使用的地址集合也是用宏来表示不同的地址族这个宏的形式是AF开头比如IP地址族为AF_INET, PF表示PROTOCOL FAMILY 协议族 协议族就是不同协议的集合在Linux中用宏来表示不同的协议族这个宏的形式是PF开头比如IPv4协议族为PF_INET 区别 地址族和协议族其实是一样的值也一样都是用来识别不同协议的为什么要搞两套东西呢 ​ 这是因为之前UNIX有两种风格系统BSD系统和POSIX系统 对于BSD系统一直用的是AF对于POSIX系统一直用的是PF。 Linux作为后起之秀为了兼容所以两种都支持这样两种风格的UNIX下的软件就可以在Linux上运行了。 type type用于设置套接字通信的类型主要有SOCKET_STREAM流式套接字、SOCK_DGRAM数据包套接字) 名称含义SOCK_STREAMTcp 连接提供序列化的、可靠的、双向连接的字节流。支持带外数据传输SOCK_DGRAMUDP 连接无连接状态的消息SOCK_SEQPACKET序列化包提供一个序列化的、可靠的、双向的基本连接的数据传输通道数据长度定常。每次调用读系统调用时数据需要将全部数据读出SOCK_RAWRAW类型提供原始网络协议访问SOCK_RDM提供可靠的数据报文不过可能数据会有乱序SOCK_PACKET这是一个专用类型不能呢过在通用程序中使用 protocol protocol用于制定某个协议的特定类型即type类型中的某个类型。通常某协议中只有一种特定类型这样protocol参数仅能设置为0 但是有些协议有多种特定的类型就需要设置这个参数来选择特定的类型。 errno 函数socket()并不总是执行成功有可能会出现错误错误的产生有多种原因可以通过errno获得 值含义EACCES没有权限建立制定的domain的type的socketEAFNOSUPPORT不支持所给的地址类型EINVAL不支持此协议或者协议不可用EMFILE进程文件表溢出ENFILE已经达到系统允许打开的文件数量打开文件过多ENOBUFS/ENOMEM内存不足。socket只有到资源足够或者有进程释放内存EPROTONOSUPPORT制定的协议type在domain中不存在 sockaddr结构 socket API是一层抽象的网络编程接口,适用于各种底层网络协议,如IPv4、IPv6,以及后面要讲的UNIX Domain Socket. 然而, 各种网络协议的地址格式并不相同. sockaddr 在写代码前需要先了解这三个结构间的关系sockaddr结构体在如下头文件中定义 #include sys/socket.hsockaddr的缺陷是sa_data把目标地址和端口信息混在一起了 sockaddr 可以强转为 sockaddr_in 和 sockaddr_un( 类似于父类子类的感觉 ) struct sockaddr { sa_family_t sin_family; //地址族char sa_data[14]; //14字节包含套接字中的目标地址和端口信息 };IPv4和IPv6的地址格式定义在netinet/in.h中,IPv4地址用sockaddr_in结构体表示,包括16位地址类型, 16位端口号和32位IP地址.IPv4、IPv6地址类型分别定义为常数AF_INET、AF_INET6. 这样,只要取得某种sockaddr结构体的首地址,不需要知道具体是哪种类型的sockaddr结构体,就可以根据地址类型字段确定结构体中的内容.socket API可以都用struct sockaddr *类型表示, 在使用的时候需要强制转化成sockaddr_in; 这样的好处是程序的通用性, 可以接收IPv4, IPv6, 以及UNIX Domain Socket各种类型的sockaddr结构体指针做为参数; sockaddr_in 头文件 #includenetinet/in.h #includearpa/inet.h此结构的地址类型为AF_INET是网络套接字 sockaddr_in结构体是和sockaddr结构并列且等价的结构体因此它们二者之间可以互相转化也是真正用来提供给程序员进行填充操作的结构体 区别在于 sockaddr_in 将 sa_data 划分为 sin_port 和 sin_addr也就是把端口和IP地址信息区分开sin_port采用了网络字节序同时为了保持和sockaddr相同的字节大小填充了8字节的sin_zero。这也是一个只针对IPv4地址的结构体因此它的 sin_family 只能是 AF_INET。 //简略版 struct sockaddr_in {__SOCKADDR_COMMON(sin_); //该项是个宏在编译时会将 sin_ 和 family 拼接后形成成员 sin_famliyin_port_t sin_port;struct in_addr sin_addr }//详细版 struct sockaddr_in {__SOCKADDR_COMMON (sin_); // 此成员就是 sin_family , __SOCKADDR_COMMON 是一个宏编译后 sin_ 后面会接上 family in_port_t sin_port; /* Port number. */ // uint16_t 类型 16 位 TCP/UDP 端口号struct in_addr sin_addr; /* Internet address. */ //32 位 IP 地址/* Pad to size of struct sockaddr. */unsigned char sin_zero[sizeof (struct sockaddr) -__SOCKADDR_COMMON_SIZE -sizeof (in_port_t) -sizeof (struct in_addr)]; };// in_addr 的类型 (32位IP地址) typedef uint32_t in_addr_t; struct in_addr {in_addr_t s_addr; // 32 位 IPv4 地址 };使用示例 注意该结构体使用先进行置空 struct sockaddr_in local;bzero(local, sizeof(local)); // 将指定的内存清零 local.sin_family AF_INET; // 告诉系统绑定的是网路通信的信息local.sin_port htons(_port); // _port 是主机序列,需要主机转网络序列local.sin_addr.s_addr inet_addr(_ip.c_str()); // sin.adder 是一个结构体这个结构体里面只有一个成员// 1. 将 _ip变为四字节ip 2. 变成网络序列sockaddr 和 sockaddr_in 的关系 二者长度一样都是16个字节即占用的内存大小是一致的因此可以互相转化。二者是并列结构指向sockaddr_in结构的指针也可以指向sockaddr。 sockaddr常用于bind、connect、recvfrom、sendto等函数的参数指明地址信息是一种通用的套接字地址。 sockaddr_in 是internet环境下套接字的地址形式。所以在网络编程中我们会对sockaddr_in结构体进行操作使用sockaddr_in来建立所需的信息最后使用类型转化就可以了。一般先把sockaddr_in变量赋值后强制类型转换后传入用sockaddr做参数的函数sockaddr_in用于socket定义和赋值sockaddr用于函数参数。 sockaddr_un 头文件 #includenetinet/in.h #includearpa/inet.hsockaddr_un是一种UNIX套接字通常在使用这种方式时不用网络套接字而是用本地套接字 struct sockaddr_un {uint16_t sun_family;char sun_path[108]; /* Path name. */ };通讯类型只能选择 SOCK_STREAM 和 SOCK_DGRAM协议为默认协议sun_family 参数只能选择AF_LOCAL和AF_UNIXsun_path 参数为本地文件路径通常放在 /temp 目录下 示例代码 这是UDP网络程序编写的极小部分代码用到了 socket 函数和 sockaddr_in 结构体在后续文章完整编写 UdpServer 服务器时还会用到这里先放出部分用于了解 如何使用 socket 和 sockaddr_in // 创建网络套接字文件 _sockfd socket(AF_INET, SOCK_DGRAM, 0); // 创建一个 使用IPV4 UDP链接 的网络套接字// 指定网络信息 struct sockaddr_in local; bzero((void *)local, (size_t)sizeof local);local.sin_family AF_INET; local.sin_port htons(_port); // 将端口号从主机字节序转换为网络字节序 local.sin_addr.s_addr inet_addr(default_ip.c_str()); // 将 string 的 ip 信息 转换为网络字节序
http://www.zqtcl.cn/news/150195/

相关文章:

  • 网站如何做线上支付功能seo网站推广优化费用
  • 贵州灵溪seo整站优化wordpress进行不
  • 三网一体网站建设网站开发环境分析
  • 广州白云机场网站建设查询域名备案信息
  • 苗族网站建设中牟做网站
  • 潍坊网站建设建站哪个网站的课件做的好处
  • 网站建设平台杭州网上交易平台
  • 您提交的网站域名无备案我想学网站建设
  • 怎样做国际网站dw网页设计代码免费
  • wordpress做企业站基础微网站开发公司
  • 用上海注册的公司建的网站怎么做asp网站
  • 一个专做特卖的网站千鸟云网站建设
  • 哈尔滨网站优化seo知名公司
  • 企业网站的开发流程个人免费建网站
  • 旅游网站平台建设方案策划书wordpress 自建cdn
  • 网站开发回访话术内容电商网站有哪些
  • 网络广告投放网站网站如何做关
  • 葫芦岛住房和城乡建设厅网站野望王绩
  • 小说网站怎么做网站建设需求分析班级
  • 开设购物网站的方案网站免费seo
  • 免费手机h5模板网站模板下载wordpress所有插件
  • 北京做网站开发公司wordpress主题创建后门
  • 企业门户网站建设内容企业建设网站的功能是什么意思
  • 做a的网站有哪些在国外做网站推广
  • 做外贸网站设计上需要注意什么python做音乐网站
  • 英语门户网站织梦源码wordpress 推荐插件
  • 学做衣服网站有哪些网站建设算入会计分录
  • 京东网站开发技术织梦网站如何做404
  • 论坛类网站开发屏蔽wordpress缩略图
  • 南宁市两学一做网站logo设计网站官网