accept

什么是socket

你。 提交于 2019-11-28 08:53:36
要写网络程序就必须用 Socket ,这是程序员都知道的。而且,面试的时候,我们也会问对方会不会 Socket 编程?一般来说,很多人都会说, Socket 编程基本就是 listen , accept 以及 send , write 等几个基本的操作。是的,就跟常见的文件操作一样,只要写过就一定知道。 对于网络编程,我们也言必称 TCP/IP ,似乎其它网络协议已经不存在了。对于 TCP/IP ,我们还知道 TCP 和 UDP ,前者可以保证数据的正确和可靠性,后者则允许数据丢失。最后,我们还知道,在建立连接前,必须知道对方的 IP 地址和端口号。除此,普通的程序员就不会知道太多了,很多时候这些知识已经够用了。最多,写服务程序的时候,会使用多线程来处理并发访问。 我们还知道如下几个事实: 1 。一个指定的端口号不能被多个程序共用。比如,如果 IIS 占用了 80 端口,那么 Apache 就不能也用 80 端口了。 2 。很多防火墙只允许特定目标端口的数据包通过。 3 。服务程序在 listen 某个端口并 accept 某个连接请求后,会生成一个新的 socket 来对该请求进行处理。 于是,一个困惑了我很久的问题就产生了。如果一个 socket 创建后并与 80 端口绑定后,是否就意味着该 socket 占用了 80 端口呢?如果是这样的,那么当其 accept 一个请求后

通信网络实验-socket编程

99封情书 提交于 2019-11-28 06:23:28
Socket编程学习 一、Socket简介 Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个外观模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。 二、Socket使用方法 使用Socket时,要分别在服务器端和客户端进行设置。服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接。在这时如果有个客户端初始化一个Socket,然后连接服务器(connect),如果连接成功,这时客户端与服务器端的连接就建立了。客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束。整个过程可以用一张图概括如下: 三、Socket的基本函数 1.socket() int socket(int domain, int type, int protocol); socket函数对应于普通文件的打开操作。普通文件的打开操作返回一个文件描述字,而socket()用于创建一个socket描述符(socket descriptor),它唯一标识一个socket。这个socket描述字跟文件描述字一样,后续的操作都有用到它

网络编程之 tcp服务器(一)

夙愿已清 提交于 2019-11-28 05:26:12
  1、创建套接字   2、bind绑定ip和port   作为服务方,ip port 应该是固定的,所以要绑定;客户端一般不绑定   3、listen使套接字变成监听套接字,即变为被动链接   4、accept等待客户的链接   生活中的电话机“   1、买手机   2、插上手机卡   3、设置成响铃状态,否则别人打电话听不到   4、接听电话-等待别人打进来   **1. **vim 05-tcp服务器.py   思路:用注释搭建流程   def main():   #1、买手机(创建套接字)   #2、插手机卡(绑定 bind ip port)   #3、设置成响铃状态(将套接字由主动变为被动 listen)   #4、等待别人打进来(等待客户链接 accept)   if __name__ == "__main__":   main()   思路:完善代码   命令:   esc进入命令模式,大写的I回到光标所在行的行首-(当按下I后同时也就进入了编辑模式)   大A回到光标所在行的行末   注意:   listen有一个参数,是一个数值,一般写128,参数越大,以后可以连接的客户端越多,参数越小链接的客户端越少,操作系统不同,参数不同影响不同,linux中128 与256与10差别不是很大,一般写128就可以了   。   accept有一个返回值,返回值是一个元组

iptables 配置场景3

ⅰ亾dé卋堺 提交于 2019-11-28 04:56:05
iptables -I INPUT -i lo -j ACCEPT #允许本地回环地址访问; iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -s 192.168.235.0/24 -j ACCEPT iptables -A INPUT -s 192.168.8.0/24 -j ACCEPT iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 1723 -j ACCEPT #VPN端口; iptables -A INPUT -j REJECCT#拒绝掉不在规则内的全部请求 来源: https://www.cnblogs.com/superxuezhazha/p/11392493.html

访问者模式(Visitor Pattern)

会有一股神秘感。 提交于 2019-11-28 04:45:32
模式定义 封装某些作用于某种数据结构中各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。 UML类图 抽象访问者(Vistor) 声明一个或多个访问抽象节点类型的抽象方法(参数为抽象节点类型),依赖抽象节点类型。 具体访问者(ConcreteElement) 实现抽象访问者角色中所有声明的接口。 抽象元素(Element) 声明节点被访问者访问的方法,依赖与访问者。 具体元素(ConcreteElement) 实现抽象元素所规定的接受操作。 对象结构(ObjectStructure) 节点的容器,可以包含多个不同类或接口的容器。 代码结构 public static class VisitorApp { public static void Run() { ObjectStructure o = new ObjectStructure(); o.Attach(new ConcreteElementA()); o.Attach(new ConcreteElementB()); // Create visitor objects ConcreteVisitor1 v1 = new ConcreteVisitor1(); ConcreteVisitor2 v2 = new ConcreteVisitor2(); // Structure accepting

设计模式之访问者模式

北战南征 提交于 2019-11-28 04:45:19
访问者模式 概述 访问者模式 是一种将数据操作与数据结构分离的模式 是23中设计模式中最复杂的一个,使用频率也不是很高,但一旦需要它的时候将变得非常有用. 软件系统中拥有一个由许多对象构成的,比较稳定的对象结构.这些对象的类都拥有一个 accept 方法用来接收访问者对象的访问. 访问者是一个接口,拥有 visit 方法,这个方法对访问到的对象结构中不同类型的元素做出不同的处理. 在对象结构的一次访问过程中,我们遍历整个对象结构,对每个元素都实施 accept 方法,在每个元素的 accept 方法中会调用访问者的 visit 方法,使得访问者得以处理对象结构的每一个元素. 定义 封装一些作用于某种数据结构中的各个元素的操作,它可以在不改变这个数据结构的前提下定义作用于这些元素的新的操作. UML Visitor : 接口或抽象类,它定义了对每一个元素( Element )访问的行为,它的参数就是可以访问的元素,它的方法个数理论上来讲与元素个数是一样的,因此,访问者模式要求元素的了类族要稳定. ConcreteVisitor : 具体的访问者,它需要给出对每一个元素类访问时所产生的具体行为 Element : 元素接口或者抽象类,它定义了一个接受访问者( accept )的方法,其意义是指每一个元素都要可以被访问者访问. ElementAA,ElementB : 具体的元素类

14.访问者模式

不打扰是莪最后的温柔 提交于 2019-11-28 04:44:51
访问者模式 一、应用实例 将观众分为男和女,对歌手进行测评,当看完某个歌手表演后,得到他们对该歌手不同的评价(成功、失败等) 二、访问者模式 1.基本介绍 1)封装一些作用于某种数据结构的各元素操作,在不改变数据结构的前提下定义作用于这些元素的新的操作。 2)将数据结构与数据操作分离,解决 数据结构和操作耦合性问题 3)基本工作原理:在被访问的类里面增加一个对外提供接待访问者的接口 2.原理类图 1)Visitor是抽象访问者,为该对象结构中的ConcreteElement的每一个类声明一个visit操作 2)ConcreteVisitor:是一个具体的访问者实现每个有Visitor声明的操作,是每个操作实现的部分. 3)ObjectStructure 能枚举它的元素,可以提供一个高层的接口,用来允许访问者访问元素 4)Element 定义一个accept方法,接收一个访问者对象 5)ConcreteElement 为具体元素,实现了accept 方法 三、访问者应用实例 1.思路分析 2.代码实现 /** * 抽象访问者 */ public abstract class Action { //得到男性 的测评 public abstract void getManResult(Man man); //得到女的 测评 public abstract void

iptables的四个表5个链

只愿长相守 提交于 2019-11-27 23:53:07
一、 netfilter和iptables说明: 1、 netfilter/iptables IP 信息包过滤系统是一种功能强大的工具,可用于添加、编辑和除去规则,这些规则是在做信息包过滤决定时,防火墙所遵循和组成的规则。这些规则存储在专用的信息包过滤表中,而这些表集成在 Linux 内核中。在信息包过滤表中,规则被分组放在我们所谓的链(chain)中。 虽然 netfilter/iptables IP 信息包过滤系统被称为单个实体,但它实际上由两个组件 netfilter 和 iptables 组成。 (1). netfilter 组件也称为 内核空间(kernelspace) ,是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。 (2). iptables 组件是一种工具,也称为 用户空间(userspace) ,它使插入、修改和除去信息包过滤表中的规则变得容易。 iptables包含4个表,5个链。其中表是按照对数据包的操作区分的,链是按照不同的Hook点来区分的,表和链实际上是netfilter的两个维度。 2、 4个表:filter,nat,mangle,raw,默认表是filter(没有指定表的时候就是filter表)。表的处理优先级:raw>mangle>nat>filter。 filter :一般的过滤功能 nat:

Nginx为什么可以支持高并发

时光毁灭记忆、已成空白 提交于 2019-11-27 15:28:20
Nginx为什么可以支持高并发 nginx 采用的是多进程+epoll,能实现高并发,其可以支持的并发上限大概是同时支持5W个连接 多进程 nginx 在启动后,会有一个 master 进程和多个相互独立的 worker 进程,master进程接收来自外界的连接,并向各worker进程发送信号,每个进程都有可能来处理这个连接,master进程能监控worker进程的运行状态,当 worker 进程退出后(异常情况下),会自动启动新的worker进程 惊群现象 master进程首先通过 socket() 来创建一个socket文件描述符用来监听,然后fork生成子进程(workers 进程),那么当连接进来时,所有子进程都将收到master进程的 通知并“争着”与它建立连接,这就叫“惊群现象”。大量的进程被激活又挂起,只有一个进程可以accept() 到这个连接,这当然会消耗系统资源 nginx对惊群现象的处理accept_mutex(加锁) nginx 提供了一个 accept_mutex 这个东西,即每个 worker 进程在执行accept之前都需要先获取锁,获取不到就放弃执行accept()。有了这把锁之后,同一时刻,就只会 有一个进程去accpet(),这样就不会有惊群问题了 来源: https://www.cnblogs.com/ghl666/p/11937666