套接字

Py西游攻关之Socket网络编程

十年热恋 提交于 2020-03-25 03:11:13
新闻 管理 Py西游攻关之Socket网络编程 知识预览 计算机网络 回到顶部 网络通信要素 : A:IP地址 (1) 用来标识网络上一台独立的主机 (2) IP地址 = 网络地址 + 主机地址(网络号:用于识别主机所在的网络/网段。主机号:用于识别该网络中的主机) (3) 特殊的IP地址: 127.0.0.1 (本地回环地址、保留地址,点分十进制) 可用于简单的测试网卡是否故障。表示本机。 B:端口号: (1) 用于标识进程的逻辑地址。不同的进程都有不同的端口标识。 (2) 端口: 要将数据发送到对方指定的应用程序上,为了标识这些应用程序,所以给这些网络应用程序都用数字进行标识。为了方便称呼这些数字,则将这些数字称为端口。(此端口是一个逻辑端口) C: 传输协议 : 通讯的规则。例如:TCP、UDP协议(好比两个人得用同一种语言进行交流) ①、UDP:User Datagram Protocol用户数据报协议 特点: 面向无连接:传输数据之前源端和目的端不需要建立连接。 每个数据报的大小都限制在64K(8个字节)以内。 面向报文的不可靠协议。(即:发送出去的数据不一定会接收得到) 传输速率快,效率高。 现实生活实例:邮局寄件、实时在线聊天、视频会议…等。 ②、TCP:Transmission Control Protocol传输控制协议 特点: 面向连接:传输数据之前需要建立连接

python学习Day33--SocketServer

我与影子孤独终老i 提交于 2020-03-23 17:22:03
一、回顾(需要记住的) 1、架构:   C/S架构:充分发挥PC机性能   B/S架构:统一了应用的接口,隶属于C/S架构 2、物理地址:mac,全球唯一,类似于一个身份证 3、IP地址:四位点分十进制 4、arp协议:通过目标的IP地址,获取目标mac地址 5、OSI五层模型:   应用层 http, https, ftp, py文件   传输层 tcp/udp协议   网络层 ip协议   数据链路层 arp协议   物理层 传输电信号 6、交换机的通信方式:   单播:点对点   组播:点对多(一组,不是指所有)   广播:向多个PC端发送数据包 7、交换机的功能:   组成局域网,经过内部处理解析数据,将数据以点对点,点对多的方式发送给目标 8、路由器的功能:   跨网段的数据传输,路由出网络传输的最佳路径。 9、TCP协议:面向连接的,面向字节流传输,可靠   UDP协议:无连接,面向数据包,不可靠,传输速度快 10、TCP与UDP协议的区别:   TCP有三次握手,四次挥手   (1)三次握手:第一次的请求一定是客服端先发起     客服端向服务器发送一个连接请求;     客服端回复一个确认接收到请求,并要求连接客服端;     客服端回复服务器一个确认连接的消息,   (2)四次挥手:谁先发起都可以     客服端先发送一个断开连接的请求;    

linux c++ socket

牧云@^-^@ 提交于 2020-03-22 09:44:19
一.TCP Server: 1.创建套接字socket():socket本质上就是一个int的数字,文件描述符,用于标识主机间端到端的通讯。两端的主机,通过对该socket进行读写,完成双方的通讯。 2.绑定 bind():是将已经新建好的套接字(即:socket)与本地的地址进行一个联系(即:将socket绑定到一个本地地址和端口上)。 3.将套接字设定为监听模式,准备接受客户端请求listen(): 监听是告诉客户端,服务器这边已经准备好了,等待为其服务啦。 4.接收连接 accept():等待客户端请求到来,当请求到来后,接受连接请求,返回一个新的对应于此连接的套接字. 5.读写 read()/write() : 关于读写的函数比较多,read()\write(), recv()\send()、recvfrom\sendto(),recvmsg()\sendmsg()等。几组函数间比较相似,个别又有特点. 6.返回,等待另一个客户端请求. 7.关闭套接字. 二.TCP Client: 1.新建 socket() 2.连接 connect() 三.sockaddr_in 数据结构 使用数据结构sockaddr_in存储IP和端口等参数 sockaddr_in(在netinet/in.h中定义): 1 2 3 4 5 6 7 8 9 10 11 12 13 struct

redis事件

佐手、 提交于 2020-03-22 01:36:20
Redis服务器是一个事件驱动程序,服务器需要处理以下两类事件 1:文件事件(file event):Redis服务器通过套接字与客户端进行连接,而文件事件就是服务器对套接字操作的抽象。服务器与客户端的通信会产生相应的文件事件,而服务器则通过监听并处理这些事件来完成一系列网络通信操作 2:时间事件(time event):Redis服务器中的一些操作(比如serverCron函数)需要在给定的时间点执行,而时间事件就是服务器对这类定时操作的抽象 文件事件 Redis基于Reactor模式开发了自己的网络事件处理器:这个处理器被称为文件事件处理器(file event handler) 1:文件事件处理器使用I/O多路复用程序来同时监听多个套接字,并根据套接字目前执行的任务来为套接字关联不同的事件处理器 2:当被监听的套接字准备好执行连接应答(accept)、读取(read)、写入(write)、关闭(close)等操作时,与操作相对应的文件事件就会发生,这时文件事件处理器就会调用套接字之前关联好的事件处理器来处理这些事件 虽然文件事件处理器以单线程方式运行,但通过使用I/O多路复用程序来监听多个套接字,文件事件处理器既实现了高性能的网络通信模型,又可以很好地与Redis服务器中其他同样以单线程方式运行的模块进行对接,这保持了Redis内部单线程设计的简单性 文件事件处理器的构成

socket可读可写就绪条件

蹲街弑〆低调 提交于 2020-03-21 04:57:00
参考 《UNIX 网络编程卷1》中的《第6章 I/O复用》 一、 满足下列四个条件中的任何一个时,一个套接字准备好读。 该套接字接收缓冲区中的数据字节数大于等于套接字接收缓存区低水位。 对于TCP和UDP套接字而言,缓冲区低水位的值默认为1。那就意味着,默认情况下,只要缓冲区中有数据,那就是可读的。我们可以通过使用SO_RCVLOWAT套接字选项(参见setsockopt函数)来设置该套接字的低水位大小。此种描述符就绪(可读)的情况下,当我们使用read/recv等对该套接字执行读操作的时候,套接字不会阻塞,而是成功返回一个大于0的值(即可读数据的大小)。 该连接的读半部关闭(也就是接收了FIN的TCP连接)。对这样的套接字的读操作,将不会阻塞,而是返回0(也就是EOF)。 该套接字是一个listen的监听套接字,并且目前已经完成的连接数不为0。对这样的套接字进行accept操作通常不会阻塞。 有一个错误套接字待处理。对这样的套接字的读操作将不阻塞并返回-1(也就是返回了一个错误),同时把errno设置成确切的错误条件。这些待处理错误(pending error)也可以通过指定SO_ERROR套接字选项调用getsockopt获取并清除。 二、满足下列四个条件中的任何一个时,一个套接字准备好写。 该套接字发送缓冲区中的可用空间字节数大于等于套接字发送缓存区低水位标记时

socket实现TCP简单循环通信(Python)

坚强是说给别人听的谎言 提交于 2020-03-21 01:05:15
一、socket通信过程 TCP服务器端创建套接字 --> 绑定IP地址和端口 --> 监听客户端连接请求 --> 接收客户端连接(建立客户端连接) --> 阻塞直到有客户端连接 --> 处理请求(通信循环) --> 关闭连接 --> 关闭套接字 TCP客户端创建套接字 --> 连接服务端IP以及端口 --> 处理请求(通信循环) --> 关闭套接字 二、套接字函数 1.服务端套接字函数 s.bind(address) 将套接字绑定到地址,在AF_INET下,以元组(host,port)的形式表示地址。 s.listen(backlog) 开始监听TCP传入连接。backlog指定在拒绝连接之前,操作系统可以挂起的最大连接数量。该值至少为1,大部分应用程序设为5就可以了。 s.accept() 接受TCP连接并返回(conn,address),其中conn是新的套接字对象,可以用来接收和发送数据。address是连接客户端的地址。 2.客户端套接字函数 s.connect(address) 连接到address处的套接字。一般address的格式为元组(hostname,port),如果连接出错,返回socket.error错误。 3.公共套接字函数 s.recv(bufsize[,flag]) 接受TCP套接字的数据。数据以字符串形式返回,bufsize指定要接收的最大数据量

HttpClient 教程 (二)

无人久伴 提交于 2020-03-20 23:48:07
第二章 连接管理 HttpClient有一个对连接初始化和终止,还有在活动连接上I/O操作的完整控制。而连接操作的很多方面可以使用一些参数来控制。 2.1 连接参数 这些参数可以影响连接操作: 'http.socket.timeout': 定义了套接字的毫秒级超时时间(SO_TIMEOUT),这就是等待数据,换句话说,在两个连续的数据包之间最大的闲置时间。如果超时时间是0就解释为是 一个无限大的超时时间。这个参数期望得到一个java.lang.Integer类型的值。如果这个参数没有被设置,那么读取操作就不会超时(无限大的超 时时间)。 'http.tcp.nodelay': 决定了是否使用Nagle算法。Nagle算法视图通过最小化发送的分组数量来节省带宽。当应用程序希望降低网络延迟并提高性能时,它们可以关闭 Nagle算法(也就是开启TCP_NODELAY)。数据将会更早发送,增加了带宽消耗的成文。这个参数期望得到一个 java.lang.Boolean类型的值。如果这个参数没有被设置,那么TCP_NODELAY就会开启(无延迟)。 'http.socket.buffer- size':决定了内部套接字缓冲使用的大小,来缓冲数据同时接收/传输HTTP报文。这个参数期望得到一个java.lang.Integer类型的 值。如果这个参数没有被设置

HttpClient 教程 (二)

纵饮孤独 提交于 2020-03-20 23:47:50
第二章 连接管理 HttpClient有一个对连接初始化和终止,还有在活动连接上I/O操作的完整控制。而连接操作的很多方面可以使用一些参数来控制。 2.1 连接参数 这些参数可以影响连接操作: 'http.socket.timeout':定义了套接字的毫秒级超时时间(SO_TIMEOUT),这就是等待数据,换句话说,在两个连续的数据包之间最大的闲置时间。如果超时时间是0就解释为是一个无限大的超时时间。这个参数期望得到一个java.lang.Integer类型的值。如果这个参数没有被设置,那么读取操作就不会超时(无限大的超时时间)。 'http.tcp.nodelay':决定了是否使用Nagle算法。Nagle算法视图通过最小化发送的分组数量来节省带宽。当应用程序希望降低网络延迟并提高性能时,它们可以关闭Nagle算法(也就是开启TCP_NODELAY)。数据将会更早发送,增加了带宽消耗的成文。这个参数期望得到一个java.lang.Boolean类型的值。如果这个参数没有被设置,那么TCP_NODELAY就会开启(无延迟)。 'http.socket.buffer-size':决定了内部套接字缓冲使用的大小,来缓冲数据同时接收/传输HTTP报文。这个参数期望得到一个java.lang.Integer类型的值。如果这个参数没有被设置

HttpClient 教程 (二)

ⅰ亾dé卋堺 提交于 2020-03-20 23:47:05
第二章 连接管理 HttpClient有一个对连接初始化和终止,还有在活动连接上I/O操作的完整控制。而连接操作的很多方面可以使用一些参数来控制。 2.1 连接参数 这些参数可以影响连接操作: 'http.socket.timeout':定义了套接字的毫秒级超时时间(SO_TIMEOUT),这就是等待数据,换句话说,在两个连续的数据包之间最大的闲置时间。如果超时时间是0就解释为是一个无限大的超时时间。这个参数期望得到一个java.lang.Integer类型的值。如果这个参数没有被设置,那么读取操作就不会超时(无限大的超时时间)。 'http.tcp.nodelay':决定了是否使用Nagle算法。Nagle算法视图通过最小化发送的分组数量来节省带宽。当应用程序希望降低网络延迟并提高性能时,它们可以关闭Nagle算法(也就是开启TCP_NODELAY)。数据将会更早发送,增加了带宽消耗的成文。这个参数期望得到一个java.lang.Boolean类型的值。如果这个参数没有被设置,那么TCP_NODELAY就会开启(无延迟)。 'http.socket.buffer-size':决定了内部套接字缓冲使用的大小,来缓冲数据同时接收/传输HTTP报文。这个参数期望得到一个java.lang.Integer类型的值。如果这个参数没有被设置

HttpClient 教程 (二)

 ̄綄美尐妖づ 提交于 2020-03-20 23:46:45
转自:http://www.cnblogs.com/loveyakamoz/archive/2011/07/21/2112832.html 第二章 连接管理 HttpClient有一个对连接初始化和终止,还有在活动连接上I/O操作的完整控制。而连接操作的很多方面可以使用一些参数来控制。 2.1 连接参数 这些参数可以影响连接操作: 'http.socket.timeout':定义了套接字的毫秒级超时时间(SO_TIMEOUT),这就是等待数据,换句话说,在两个连续的数据包之间最大的闲置时间。如果超时时间是0就解释为是一个无限大的超时时间。这个参数期望得到一个java.lang.Integer类型的值。如果这个参数没有被设置,那么读取操作就不会超时(无限大的超时时间)。 'http.tcp.nodelay':决定了是否使用Nagle算法。Nagle算法视图通过最小化发送的分组数量来节省带宽。当应用程序希望降低网络延迟并提高性能时,它们可以关闭Nagle算法(也就是开启TCP_NODELAY)。数据将会更早发送,增加了带宽消耗的成文。这个参数期望得到一个java.lang.Boolean类型的值。如果这个参数没有被设置,那么TCP_NODELAY就会开启(无延迟)。 'http.socket.buffer-size':决定了内部套接字缓冲使用的大小,来缓冲数据同时接收/传输HTTP报文