热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

20、网络IPC:套接字(1)

1、套接字是通信端点的抽象。创建套接字,成功则返回描述符intsocket(intdomain,inttype,intprotocol);(1&#x

1、套接字是通信端点的抽象。

//创建套接字,成功则返回描述符
int socket(int domain, int type, int protocol);(1)domain域确定通信的特性,如地址格式,AF=address family
AF_INET IPv4因特网域
AF_INET6 IPv4因特网域
AF_UNIX UNIX域
AF_UNSPEC 未指定(2)type套接字类型,进一步确定通信特征
SOCK_DGRAM 固定长度数据包,两个进程不需要连接,只需要向其套接字发送一个报文
SOCK_RAM IP协议的数据报接口,之间访问IP层,绕过传输协议,应用自己构造协议头部
SOCK_SEQPACKET 固定长度、有序、面向连接的的报文传递
SOCK_STREAM 字节流,需要建立连接(3)protocol协议,为0则根据域和套接字类型自动选择协议
IPPROTO_IP IPv4网际协议
IPPROTP_IP6 IPv6网际协议
IPPROTP_ICMP 因特网控制报文协议
IPPROTP_RAW 原始IP数据包协议
IPPROTP_TCP 传输控制协议
IPPROTP_UDP 用户数据包协议

//禁止套接字的IO(IO指读和写)
int shutdown(int sockfd, int how);

2、字节序:印第安序,Intel处理器一般为小端,TCP/IP协议栈使用大端
大端:低地址放高字节,从低地址开始读数
小端:低地址放低字节
进程标志由两部分组成:计算机网络地址;计算机上用端口号表示的服务

//htonl:host to net long
uint32_t htonl(uint32_t hostint32);
uint16_t htons(uint16_t hostint16);uint32_t ntohl(uint32_t netint32);
uint16_t ntohs(uint16_t netint16);

3、地址格式
不同格式地址会被强制转换成一个通用的地址结构srtuct sockaddr。Linux中IPv4因特网域中的套接字

struct sockaddr_in{sa_family_t sin_family;in_port_t sin_port;struct in_addr sin_addr;unsigned char sin_zero[8];
};
struct in_addr{in_addr_t s_addr;//IPv4地址
};//二进制地址格式与点分十进制字符转换
const char *inet_ntop(int domain, const void *restrict addr, char *restrict str, socklen_t size);
int inet_pton(int domain, const void *restrict str, void *restrict str);

4、地址查询

//主机信息
struct hostent{char *h_name;char **h_aliases;//执行主机别名数组的指针int h_addrtype;//地址类型int h_length;char **h_addr_list;
}//网络信息
struct netent{char *n_name;char **n_aliases;int n_addrtype;uint32_t n_net;
}//协议信息
struct protoent{char *p_name;char **p_aliases;int p_proto;
};//服务信息
服务是由地址的端口号部分表示的,每个服务由一个唯一的总所周知的端口号支持。
struct servent{char *s_name;char **s_aliases;int s_prot;char *s_proto;
};struct addrinfo{int ai_flags;int ai_family;int ai_socktype;int ai_protocol;socklen_t ai_addrlen;struct sockaddr *ai_addr;char *ai_canonname;struct addrinfo *ai_next;
};
//将一个主机名和一个服务名映射到一个地址
//提供host主机名(ip)和service服务名(pid),hint为筛选模板,res为返回值
int getaddrinfo(const char *restrict host, const char *restrict service, const struct addrinfo *restrict hint, struct addrinfo **restrict res);

5、服务器需要给一个发起请求的接收客户端套接字关联上一个已知的地址(某个名字的服务)。

//关联地址和套接字
int bind(int sockfd, const struct sockaddr *addr, socklen_t len);//发现绑定在套接字上的地址
int getsockname(int sockfd, struct sockaddr *restrict addr, socklen_t *restrict alenp);//套接字已经和对等方连接时,找到对方地址
int getpeername(int sockfd, struct sockaddr *restrict addr, socklen_t *restrict alenp);//客户端向服务器端-建立连接
//addr:想与之通信的服务器地址,服务器必须绑定到一个想与之连接的地址上
int connect(int sockfd, const struct sockaddr *addr, socklen_t len);//服务器表示可以接收连接请求
//backlog提示服务器未完成请求连接的数量
int listen(int sockfd, int backlog);//建立连接
//返回请求连接的客户端套接字描述符
//addr:存放地址的缓冲区
int accept(int sockfd, struct sockaddr *restrict addr, socklen_t *restrict len);
调用accept,没有请求到达会一直阻塞直到一个请求到达。服务器可以使用poll或select等待一个请求到达。

推荐阅读
  • 概述H.323是由ITU制定的通信控制协议,用于在分组交换网中提供多媒体业务。呼叫控制是其中的重要组成部分,它可用来建立点到点的媒体会话和多点间媒体会议 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • 【重识云原生】第四章云网络4.8.3.2节——Open vSwitch工作原理详解
    2OpenvSwitch架构2.1OVS整体架构ovs-vswitchd:守护程序,实现交换功能,和Linux内核兼容模块一起,实现基于流的交换flow-basedswitchin ... [详细]
  • 微信商户扫码支付 java开发 [从零开发]
    这个教程可以用作了解扫码支付的整体运行过程,已经实现了前端扫码,记录订单,回调等一套完整的微信扫码支付。相关链接:微信支 ... [详细]
  • SQL Server 2008 到底需要使用哪些端口?
    SQLServer2008到底需要使用哪些端口?-下面就来介绍下SQLServer2008中使用的端口有哪些:  首先,最常用最常见的就是1433端口。这个是数据库引擎的端口,如果 ... [详细]
  • 域名解析系统DNS
    文章目录前言一、域名系统概述二、因特网的域名结构三、域名服务器1.根域名服务器2.顶级域名服务器(TLD,top-leveldomain)3.权威(Authoritative)域名 ... [详细]
  • 网络安全是一个非常重要的课题,基本上你运行的服务后台越多,你就可能打开更多的安全漏洞.如果配置的恰当的话,Linux本身是非常安全可靠的,假使在Linux系统中有某个安全缺陷,由于Linu ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • Linux下安装免费杀毒软件ClamAV及使用方法
    本文介绍了在Linux系统下安装免费杀毒软件ClamAV的方法,并提供了使用该软件更新病毒库和进行病毒扫描的指令参数。同时还提供了官方安装文档和下载地址。 ... [详细]
  • 安装oracle软件1创建用户组、用户和目录bjdb节点下:[rootnode1]#groupadd-g200oinstall[rootnode1]#groupad ... [详细]
  • ZooKeeper 学习
    前言相信大家对ZooKeeper应该不算陌生。但是你真的了解ZooKeeper是个什么东西吗?如果别人面试官让你给他讲讲ZooKeeper是个什么东西, ... [详细]
author-avatar
2的4次方根God
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有