socket函数

Winsock IO模型之select模型

梦想的初衷 提交于 2020-03-19 02:47:42
之所以称其为select模型是因为它主要是使用select函数来管理I/O的。这个模型的设计源于UNIX系统,目的是允许那些想要避免在套接字调用上阻塞的应用程序有能力管理多个套接字。 int select( int nfds, // 忽略,仅是为了与Berkeley套接字兼容 fd_set* readfds, // 指向一个套接字集合,用来检查其可读性 fd_set* writefds, // 指向一个套接字集合,用来检查其可写性 fd_set* exceptfds, // 指向一个套接字集合,用来检查错误 const struct timeval* timeout // 指定此函数等待的最长时间,如果为NULL,则最长时间为无限大 ); Select模型是最常见的I/O模型。 使用 int select( int nfds , fd_set FAR* readfds , fd_set FAR* writefds,fd_set FAR* exceptfds,const struct timeval FAR * timeout ) ; 函数来检查你要调用的Socket套接字是否已经有了需要处理的数据。 select包含三个Socket队列,分别代表: readfds ,检查可读性,writefds,检查可写性,exceptfds,例外数据。 timeout是select函数的返回时间

用python实现一个socket echo程序 && tcp socket的几个关闭状态

可紊 提交于 2020-03-17 00:44:38
真实的活 - 博客园 ip地址和int类型的相互转换 这是我最近看到的一个面试题,还比较常见,于是用c, c++和python分别实现了 ip2int 和 int2ip, 因为我把main函数都写上了,代码显得有点杂乱,看的时候请重点看函数实现,忽略main函数 ipv4的地址本来就是用32位来表示的,分成4个8位来书写, 所以ipv4和地址是可以和32位unsigned int一一对应的,转换的算法就很显然了,把32位的整型4个字节的数分别计算出来; 反之则是ip地址4个节的数乘上对应的权值(256^3, 256^2, 256^1, 256^0)加起来即可 C的 #include<string.h> #include<stdio.h> #include<stdlib.h> #include<math.h> unsigned int ip2int(char * ipStr); const char* int2ip(unsigned int ipInt); const int IP_STR_LEN= 15; const int TOKEN_LEN = 4; int main(){ printf("1)ip2int 2)int2ip\nothers, quit\n"); int choice = 0; scanf("%d", &choice); while(choice ==1 ||

Python框架之Tornado(三)请求

大憨熊 提交于 2020-03-15 09:54:49
概述 本篇就来详细介绍tornado服务器(socket服务端)是如何接收用户请求数据以及如果根据用户请求的URL处理并返回数据,也就是上图的3系列所有步骤,如上图【start】是一个死循环,其中利用epoll监听服务端socket句柄,一旦客户端发送请求,则立即调用HttpServer对象的_handle_events方法来进行请求的处理。 对于整个3系列按照功能可以划分为四大部分: 获取用户请求数据(上图3.4) 根据用户请求URL进行路由匹配,从而使得某个方法处理具体的请求(上图3.5~3.19) 将处理后的数据返回给客户端(上图3.21~3.23) 关闭客户端socket(上图3.24~3.26) 3.1、HTTPServer对象的_handle_events方法 此处代码主要有三项任务:   1、 socket.accept() 接收了客户端请求。   2、创建封装了客户端socket对象和IOLoop对象的IOStream实例(用于之后获取或输出数据)。   3、创建HTTPConnection对象,其内容是实现整个功能的逻辑。 class HTTPServer(object): def _handle_events(self, fd, events): while True: try: #======== 获取客户端请求 =========# connection,

glusterfs通信之rpc

南笙酒味 提交于 2020-03-07 20:45:28
在glusterfs中,gluster与glusterd通信请求对卷的操作、集群的操作、状态的查看等;glusterd与glusterfsd通信完成对卷的操作,集群的操作,状态的查看;glusterfs与glusterfsd通信完成文件的存储。 所有这些通信都是通过内部的RPC模块来完成的。 有关RPC的相关概念、协议等这里不展开描述,有兴趣的可以看看这两篇文章( 1 , 2 )。 ========================================= 从代码的组织来看,RPC的服务端逻辑上可分为四层,server-app、rpc-server、rpc-transport、protocol,每一层都提供相应的接口供上一层调用,同时,上一层会提供回调函数供下一层来调用;同样,RPC的客户端逻辑上也可分为四层,cli-app、rpc-cli、rpc-transport、protocol。目前,protocol提供了tcp(socket)和rdma两种方式,且都以动态库的方式提供,rpc-transport会根据配置加载不同的动态库。我们以gluster与glusterd的通信并选用tcp的方式为例来看看RPC相关流程。 1. 服务端的初始化 关键流程如图所示: 需要注意的是:rpc_transport_load时会根据协议的类型加载(使用dlopen)不同的动态库

Linux网络编程视频 百度网盘

為{幸葍}努か 提交于 2020-03-06 23:36:13
Linux网络编程(总共41集) 讲解Linux网络编程知识,分以下四个篇章。 Linux网络编程之TCP/IP基础篇 Linux网络编程之socket编程篇 Linux网络编程之进程间通信篇 Linux网络编程之线程篇 Linux网络编程之TCP/IP基础篇 01TCPIP基础(一) ISO/OSI参考模型 TCP/IP四层模型 基本概念(对等通信、封装、分用、端口) 02TCPIP基础(二) 最大传输单元(MTU)/路径MTU 以太网帧格式 ICMP ARP RARP 03TCPIP基础(三) IP数据报格式 网际校验和 路由 04TCPIP基础(四) TCP特点 TCP报文格式 连接建立三次握手 连接终止四次握手 TCP如何保证可靠性 05TCPIP基础(五) 滑动窗口协议 UDP特点 UDP报文格式 Linux网络编程之socket编程篇 06socket编程(一) 什么是socket IPv4套接口地址结构 网络字节序 字节序转换函数 地址转换函数 套接字类型 07socket编程(二) TCP客户/服务器模型 回射客户/服务器 socket、bind、listen、accept、connect 08socket编程(三) SO_REUSE AD DR 处理多客户连接(process-per-conection) 点对点聊天程序实现 09socket编程(四)

socket编程listen函数限制连接数的解决方案

大憨熊 提交于 2020-03-06 04:36:49
函数原型: int listen(int sockfd, int backlog); 当服务器编程时,经常需要限制客户端的连接个数,下面为问题分析以及解决办法: 下面只讨论TCP UDP不做讨论(很少使用到listen函数)   listen函数用法:函数应该在调用socket和bind这两个函数之后,accept函数之前调用。   listen函数作用:让服务器套接字sockfd进入监听状态。 1.返回值:   成功返回0;   失败返回-1。 2.参数:   sockfd:套接字,成功返回后进入监听模式,当有新连接并accept后会再建立一个套接字保存新的连接;   backlog:暂且翻译为后备连接吧!下面详细介绍此参数:   1) 当TCP接收一个连接后(三次握手通过)会将此连接存在连接请求队列里面,并对队列个数+1,而backlog为此队列允许的最大个数,超过此值,则直接将新的连接删除,即不在接收新的连接。将这些处于请求队列里面的连接暂记为后备连接,这些都在底层自动完成,底层将连接添加到队列后等待上层来处理(一般是调用accept函数接收连接);   2) 当上层调用accept函数接收一个连接(处于请求队列里面的后备连接),队列个数会-1;   3) 那么这样一个加一个减,只要底层提交的速度小于上层接收的速度(一般是这样),很明显backlog就不能限制连接的个数

网络编程py

徘徊边缘 提交于 2020-03-05 15:13:10
概念 day27 ​ 网络架构 ​ C/S :qq 微信 浏览器 英雄联盟 穿越火线 王者荣耀 安装 ​ C:client 客户端 ​ S:server 服务端 ​ B/S :百度 淘宝 码云 只要在浏览器输入网址就可以直接使用了 ​ B:browser 浏览器 ​ S:server 服务端 ​ B/S更好: 更节省资源 不用更新 不依赖环境 ​ 统一了所有web程序的入口 ​ C/S架构: 安全性 程序比较庞大 ​ 移动端 ​ app ​ 微信小程序 : 统一了所有web程序的入口 ​ 支付宝 : 统一了所有和钱相关的事儿 ​ mac ​ 是一个物理地址 ​ 唯一的标识你的网络设备 ​ ip 地址 ​ 是一个逻辑地址 ​ 是可以根据你的位置变化发生改变的 ​ 能够在广域网中快速的定位你 ​ ipv4地址: ​ 4为点分十进制 ​ 0.0.0.0-255.255.255.255 ​ 2**32 ​ 公网和内网: ​ 公网 0.0.0.0-255.255.255.255(不包含保留字段的ip) 你能够在任意一 个地方去访问的ip地址 ​ 内网 所有的内网ip都要使用保留字段 只能在一个区域内使用,出了 这个区域就用不了了 192.168.0.0 - 192.168.255.255 10.0.0.0 - 10.255.255.255 172.16.0.0 - 172.32.255

【Django】Web框架本质

十年热恋 提交于 2020-03-03 05:31:02
目录 根据不同的路径返回不同的内容 普通版 函数版 函数进阶版 返回具体的HTML文件 让网页动态起来 服务器和应用程序 wsgiref 模块 "@ * 我们可以这样理解:所有的==Web应用本质上就是一个socket服务端==,而用户的==浏览器就是一个socket客服端==。** 这样我们就可以自己实现Web框架了: from socket import * sk = socket(AF_INET, SOCK_STREAM) sk.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) sk.bind(('127.0.0.1', 8080)) sk.listen() while True: conn, addr = sk.accept() data = conn.recv(9000) conn.send(b'HTTP/1.1 200 OK\r\n\r\n') # 响应状态行 conn.send(b'Hello,world!') conn.close() 可以说Web服务本质上都是在这十几行代码基础上扩展出来的,这段代码就是它们的祖宗。 用户的浏览器一输入网址,会给服务端发送数据,那浏览器会发送什么数据?怎么发?这个谁来定? 你这个网站是这个规定,他那个网站按照他那个规定,这互联网还能玩么? 所以,必须有一个统一的规则,让大家发送消息

【Django】Web框架本质

 ̄綄美尐妖づ 提交于 2020-03-03 05:29:50
目录 根据不同的路径返回不同的内容 普通版 函数版 函数进阶版 返回具体的HTML文件 让网页动态起来 服务器和应用程序 wsgiref 模块 @ * 我们可以这样理解:所有的==Web应用本质上就是一个socket服务端==,而用户的==浏览器就是一个socket客服端==。** 这样我们就可以自己实现Web框架了: from socket import * sk = socket(AF_INET, SOCK_STREAM) sk.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) sk.bind(('127.0.0.1', 8080)) sk.listen() while True: conn, addr = sk.accept() data = conn.recv(9000) conn.send(b'HTTP/1.1 200 OK\r\n\r\n') # 响应状态行 conn.send(b'Hello,world!') conn.close() 可以说Web服务本质上都是在这十几行代码基础上扩展出来的,这段代码就是它们的祖宗。 用户的浏览器一输入网址,会给服务端发送数据,那浏览器会发送什么数据?怎么发?这个谁来定? 你这个网站是这个规定,他那个网站按照他那个规定,这互联网还能玩么? 所以,必须有一个统一的规则,让大家发送消息

计算机网络的一丢丢知识点

孤人 提交于 2020-03-02 12:55:42
1. 计算机网络体系结构 计算机网络的体系结构有以上3种。 1. OSI的七层协议体系结构,概念清楚,理论完整,但复杂不实用; 2. TCP/IP体系结构,应用广泛。 3. 5层协议,综合OSI和TCP/IP的优点,相对简洁,用于原理学习。 各层的主要功能: 应用层(Application Layer): 通过应用进程间的交互来完成特定网络应用,应用层协议定义的是应用进程间通信和交互的规则。应用层协议有:域名系统DNS、HTTP协议、邮件SMTP协议。应用层交互的数据成为报文(message)。 运输层(传输层,transport layer): 负责向两台主机中进程之间的通信提供通用的数据传输服务。“通用”指多种应用可以使用同一个运输层服务。运输层主要使用的协议:1)TCP(Transmission Control Protocol)——提供面向连接的、可靠的数据传输服务,数据传输的单位是报文段(segment);2)UDP(User Datagram Protocol)——提供无连接的、尽最大努力(best-effort)的数据传输服务(不保证数据传输的可靠性),数据传输的单位是用户数据。 网络层(network layer): 负责为分组交换网上的不同主机提供通信服务。网络层使用的是无连接的网际协议IP(Internet Protocol)以及多种路由选择协议