IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Socket是什么? -> 正文阅读

[系统运维]Socket是什么?

socket(套接字)是网络进程中通信的一组接口,例如就是你和你朋友聊QQ时,两个QQ之间的通信方式。Socket起源于Unix,我们知道Unix里一切皆文件,Socket是这种模式的一种实现。Unix里面有read,open,close等操作函数,Socket里有socket,bind,linsten等函数来操作。

下面介绍常用的Socket api :
1、socket
函数原型:int socket(int domain,int type,int protocol)
用于创建一个socket描述符。指定期望的通信类型,要使用IPv4还是IPv6,使用TCP还是UDP等,根据指定的地址族,数据类型和协议来分配一个套接口的描述字,及其所用的资源的函数。
参数:domain:协议族/域,通常AF_INET(IPv4)、AF_INET6(IPv6)
type:是套接口类型,主要SOCK_STREAM(TCP协议)、SOCK_DGRAM(UDP协议)
protocol:一般为0
返回:成功时返回非负整数。

2、htonl
函数原型:uint32_t htonl(uint32_t hostlong);
函数作用:将整型变量从主机字节顺序转变成网络字节顺序

下面区分一下主机字节序和网络字节序。
主机字节序:不同的CPU的有不同的数据存放方式,就是单片机里面常见的大端和小端。
大端:高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。小端:低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。
网络字节序:
4个字节固定如下的传输顺序,首先是0~7bit,其次8~15bit,然后16~23bit,最后是24~31bit。这种传输次序称作大端字节序。由于TCP/IP首部中所有的二进制整数在网络中传输时都要求以这种次序,因此它又称作网络字节序

所以htons函数是两种格式的转换,将地址绑定到socket切记一定要使用该函数,不要去猜想你的CPU是什么端,以免引起不必要的麻烦。

3、inet_ntoa、inet_pton
函数原型:char *inet_ntoa(struct in_addr in);
函数作用:将IP地址,转换为点分十进制的字符串格式;
函数原型:int inet_pton(int af, const char *src, void *dst);
函数作用:将点分十进制的字符串格式的IP地址,转换成整数格式。
参数:af : AF_INET代表IPv4; AF_INET6 代表IPv6;
src:字符串格式点分十进制的IP地址;
dst:转换后的IP地址。

4、inet_addr
函数原型:in_addr_t inet_addr(const char *cp);
函数作用:将一个点分十进制的IP转换成一个长整数型数(u_long类型)。

5、select
函数原型:int select(int maxfdp, fd_set* readfds, fd_set* writefds, fd_set* errorfds, struct timeval* timeout);
函数作用:它能够监视我们需要监视的文件描述符的变化情况——读写或是异常

6、bind
函数原型:bind( SOCKET sockaddr, const struct sockaddr my_addr,int addrlen);
函数作用:套接字绑定到一个地址,并制定一个端口号。将套接字绑定一个IP地址和端口号,因为这两个元素可以在网络环境中唯一地址表示一个进程。

7、listen
函数原型:int listen(SOCKET sockfd, int backlog);
函数作用:listen函数使用主动连接套接字变为被连接套接口,使得一个进程可以接受其它进程的请求,
从而成为一个服务器进程。在TCP服务器编程中listen函数把进程变为一个服务器,并指定相应的套接字变为被动连接。listen函数一般在调用bind之后-调用accept之前调用。

8、accept
函数原型:int accept (int sockfd, struct sockaddr *addr, socklen_t *addrlen)。
函数作用:由TCP服务器调用,socket()返回的套接字用于监听(listen)和接受(accept)客户端的连接请求。这个套接字不能用于与客户端之间发送和接收数据。 accept()接受一个客户端的连接请求,并返回一个新的套接字。连接成功后的收发数据都是通过这个套接字来完成。

9、setsockopt
函数原型:int setsockopt(int sock, int level, int optname, const void *optval, socklen_t optlen);
函数作用:设置与某个套接字关联的选项(设置套接字的属性),例如:recv等函数默认为阻塞模式(block),即直到有数据到来之前函数不会返回,而我们有时则需要一种超时机制使其在一定时间后返回而不管是否有数据到来,这里我们就会用到setsockopt()函数。

10、fcntl
函数原型:int fcntl(int fd, int cmd, long arg);
函数作用:可以用来对已打开的文件描述符进行各种控制操作以改变已打开文件的的各种属性。

以上就是Socket的常用也是最基本的api,C/S架构都是有这几个基本函数搭建的。后面我会介绍基本TCP套接字和基本UDP套接字。

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-01-17 11:52:14  更:2022-01-17 11:54:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 8:24:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码