标签:Excel公式练习 这个问题似乎很常见,如下图1所示,有两个区域,你能够使用公式判断它们是否包含相同的值吗?...如果两个区域包含的值相同,则公式返回TRUE,否则返回FALSE。 关键是要双向比较,即不仅要以range1为基础和range2相比,还要以range2为基础和range1相比。...FALSE,TRUE) 或者: =AND(COUNT(range1)=COUNT(range2),COUNTIF(range2,range1)=1,COUNTIF(range1,range2)=1) 都可以得到正确的结果...看到了吧,同样的问题,各种函数各显神通,都可以得到想要的结果。仔细体味一下上述各个公式,相信对于编写公式的水平会大有裨益。 当然,或许你有更好的公式?欢迎留言。...注:有兴趣的朋友可以到知识星球完美Excel社群下载本文配套示例工作簿。
题目 给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。...解题思路 先比较根节点的值是否相同 && 左子树相同 && 右子树相同 代码 public boolean isSameTree(TreeNode p, TreeNode q) { if
可以将一个套接字理解成两小段内存空间:发送缓存和接收缓存,这两段存储空间通过套接字的变量名来标识。...因此,如果两个UDP报文段有不同的源IP地址或源端口号,但具有相同的目的IP地址和目的端口号,那么这两个报文段将通过相同的目的套接字定向到相同的目的进程。...在TCP服务器程序接受客户机连接,accept()函数创建并返回一个新的连接套接字用于与客户机的通信,并将这个套接字与请求报文段中的4个值:1该报文段中的源端口号,2源主机IP地址,3该报文段中的目的端口号...也就是说新创建的连接套接字通过这4个值来标识。 所有后续到达的报文段,如果它们的源端口号、源主机IP地址、目的端口号和目的IP地址都与这4个值匹配,则被多路分解到这个套接字。 为什么使用4元组呢?...事实上,Web服务器通常一个服务进程可以为每个新的客户机连接创建一个具有新连接套接字的线程。显然,对于这样的服务器,在任意给定的时间内都可能有很多套接字(具有不同的标识)连接到同一个进程。
套接字处理过程 在计算机网络中,要想实现通信,必须至少需要两个端系统,至少需要一对两个套接字才行。下面是套接字的通信过程。...socket 中的 API 用于创建通信链路中的端点,创建完成后,会返回描述该套接字的套接字描述符。就像使用文件描述符来访问文件一样,套接字描述符用来访问套接字。...当应用程序具有套接字描述符后,它可以将唯一的名称绑定在套接字上,服务器必须绑定一个名称才能在网络中访问。...而当我们的程序要使用网络时,要使用到对应的操作系统内核的操作和网卡设备,所以我们可以向操作系统申请,然后系统会为我们创建一个套接字 Socket,并返回这个 Socket 的ID,以后我们的程序要使用网络资源...所以,如果两个 UDP 报文段有不同的源 IP 地址和/或相同的源端口号,但是具有相同的目的 IP 地址和目的端口号,那么这两个报文会通过套接字定位到相同的目的进程。
(1)创建套接字(创建套接字阶段)(2)用管道连接服务器端的套接字(连接阶段)(3)收发数据(收发阶段)(4)断开管道并删除套接字(断开阶段)服务器是将阶段(2)改成了等待连接(1)创建套接字(创建套接字阶段...使用复制套接字的方式,原有的套接字依然可以完成等待连接的工作,和新建的套接字副本是没有关联的。...创建套接字除了复制套接字这个特点外,还有一个是端口号的使用,因为一个套接字需要对应一个端口号,但是需要注意新创建的套接字副本必须和原来的等待连接的套接字具有相同的端口号,原因是防止类似客户端本来想要连接...客户端 IP 地址客户端端口号服务器 IP 地址服务器端口号图片从上面这幅图可以看到,服务端可能会在一个端口上创建副本绑定很多个套接字,但是客户端的端口是完全不同并且随机的,同时IP地址也不一样,所以可以确定套接字之间是不会存在冲突的...对上套接字之后,TCP 模块会对比该套接字中保存的数据收发状态和收到的包的 TCP 头部中的信息是否匹配,比如检查收到的包序号是否匹配等,如果数据确认无误,将会生成对应的应答头部并且计算ACK号码,然后自己再生成一个序号返回给客户端
boolean isMCGlobal() 检查多播地址是否具有全局域的实用例行程序。 boolean isMCLinkLocal() 检查多播地址是否具有链接范围的实用例行程序。...在某些实现中,将 DatagramSocket 绑定到一个更加具体的地址时广播包也可以被接收 这是我们需要主要去了解的信息。我们首先要了解的是这个类具有发送数据和接收数据的功能。...套接字的实际工作由 SocketImpl 类的实例执行。应用程序通过更改创建套接字实现的套接字工厂可以配置它自身,以创建适合本地防火墙的套接字。...Socket(String host, int port) 创建一个流套接字并将其连接到指定主机上的指定端口号。...应用程序可以更改创建套接字实现的套接字工厂来配置它自身,从而创建适合本地防火墙的套接字。 构造方法 ServerSocket() 创建非绑定服务器套接字。
有序传输服务 UDP仅提供差错检验和数据交付服务 两个不同源IP或者源端口号的TCP报文将被定向到两个不同的套接字,除非该报文携带了创建初始连接的请求。...当客户“敲门”时,服务端建立一个新的套接字,之后就使用这个套接字进行数据交换。对于当今的高性能web服务器通常使用一个进程,但是为每个新的客户链接创建一个具有新套接字的新线程与之通信。...而UDP报文如果源IP或者源端口号不同,但是目的IP和端口相同,就能被定向到同一个套接字 0~1023 周知端口号 UDP报文首部仅包含源端口号,目的端口号,长度(首部加数据)与校验和。...每个字段由两个字节组成 最大传输单元:用来通知对方所能接受数据服务单元的最大尺寸 最大报文长度:用于在TCP连接建立时,收发双方协商通信时每一个报文段所能承载的最大数据长度,不包括首部。...)的变量来提供流量控制 TCP通过超时和冗余ACK来感知拥塞 TCP的通信双方,有一方发送了带有FIN标志的数据段后,表示单方面释放连接,表示本方已经无数据发送,但可以接收数据 英文名词 saturation
比如QQ之间进行通讯,,可以看作是两个不同主机之间进程之间的通讯,主机与主机之间通过ip地址不走错,而进程带有一个端口号,每个主机都有独一无二的IP而一台主机上的每个进程都有唯一的端口号。...五、socket 在套接字编程中,常常将IP地址和端口号结合起来表示一个通信的端点,这种组合称为套接字地址。因此,可以说IP地址和端口号一起构成了一个套接字地址。...: 创建一个套接字,返回套接字描述符。...accept(): 接受客户端的连接请求,并创建一个新的套接字用于与客户端进行通信。...然而 , 各种网络协议的地址格式并不相同, 套接字不仅支持跨网络的进程间通信(网络套接字),还支持本地的进程间通信(域间套接字)。
前言 Socket又称为套接字,它是所有网络通信的基础。网络通信其实就是进程间的通信,Socket主要是使用IP地址,协议,端口号来标识一个进程。...端口号的范围为0~65535(用户端口号一般大于1024),协议有很多种,一般我们经常用到的就是TCP,IP,UDP。下面我们来详细了解下Socket吧。...一、导入Socket模块 因为要操作套接字,所以需要用到套接字模块,系统中自带的就很不错,下面我们来导入: import socket 二、Socket基本用法 1.建立一个简单的Socket连接 #创建...),timeout=4,source_address=('localhost',4320)) #前后两个端口号一定要是一致,不然会报错 #构建一对已连接的套接字对象,新创建的套接字都是不可继承的 socket.socketpair...#接受最多size个数据,并以字符串形式返回 s.recvfrom(str,flag) #与recv相同,但是返回值是(接收数据的字符串,发送数据的套接字地址)的元祖形式 s.sendto(str
,但是一个进程可以拥有多个端口号,也就是进程和端口号是一对多的关系 当我们写一个程序使用端口号的时候,要避开这些知名端口号 【问题】 1.一个进程是否可以bind多个端口号呢?...可以。监听之前要进行创建套接字->绑定ip::端口号->监听。...我们可以在bind之前使用setsockopt函数,设置套接字选项,其中就包括REUSEADDR这个选项,表明多个进程可以复用bind函数中指定的地址和端口号 所以套接字就可以准确的标识一台主机上的一个进程...函数的作用 该函数采用先前创建好的套接字来对于IP地址以及端口号进行绑定,也就是表示该套接字可以标识出在一个网络中一台确定的主机并且主机中的进程 3....实现本地通信 服务器 只需要服务器创建一个套接字 使该套接字对于本地地址(127.0.0.1)进行绑定,并且绑定一个端口号(1024--65535)就行了 绑定本地地址是为了对于本地计算机的两个进程进程通信
(2)端口号:用来辨别本地通讯进程,一个本地的进程在通讯时均会占用一个端口号,不同的进程端口号不同,因此在通讯前必须要分配一个没有被访问的端口号。 (3)连接:指两个进程间的通讯链路。...因此一个完整的网间通信需要一个五元组来标识: (协议,本地地址,本地端口号,远地地址,远地端口号) 这样一个五元组,叫做一个相关(association),即两个协议相同的半相关才能组合成一个合适的相关...介绍完基础知识,下面就介绍一些API函数: 创建套接字──socket() 应用程序在使用套接字前,首先必须拥有一个套接字,系统调用socket()向应用程序提供创建套接字的手段,其调用格式如下: SOCKET...当有连接请求到达时,accept()调用将请求连接队列上的第一个客户方套接字地址及长度放入addr 和addrlen,并创建一个与s有相同特性的新套接字号。新的套接字可用于处理服务器并发请求。...bind()指定五元组中的本地二元,即本地主机地址和端口号,其用法与是否面向连接有关:在服务器方,无论是否面向连接,均要调用bind(),若采用面向连接,则可以不调用bind(),而通过connect(
TCP/IP 以其两个主要协议:传输控制协议(TCP)和网络互联协议(IP)而得名,实际上是一组协议,包括多个具有不同功能且互为关联的协议。...网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字。 通信的两端都要有Socket,是两台机器间通信的端点。 网络通信其实就是Socket间的通信。...host,int port) 创建一个流套接字并将其连接到指定主机上的指定端口号 Socket类的常用方法 public InputStream getInputStream() 返回此套接字的输入流...需要创建新的套接字对象。...关闭 Socket:断开客户端到服务器的连接,释放线路 客户端程序可以使用Socket类创建对象,创建的同时会自动向服务器方发起连接。
,但是一个进程可以拥有多个端口号,也就是进程和端口号是一对多的关系 当我们写一个程序使用端口号的时候,要避开这些知名端口号 【问题】 1.一个进程是否可以bind多个端口号呢?...可以。监听之前要进行创建套接字->绑定ip::端口号->监听。...我们可以在bind之前使用setsockopt函数,设置套接字选项,其中就包括REUSEADDR这个选项,表明多个进程可以复用bind函数中指定的地址和端口号 所以套接字就可以准确的标识一台主机上的一个进程...函数的作用 该函数采用先前创建好的套接字来对于IP地址以及端口号进行绑定,也就是表示该套接字可以标识出在一个网络中一台确定的主机并且主机中的进程 3....实现本地通信 服务器 只需要服务器创建一个套接字 使该套接字对于本地地址(127.0.0.1)进行绑定,并且绑定一个端口号(1024–65535)就行了 绑定本地地址是为了对于本地计算机的两个进程进程通信
由于TCP/IP传输层的两个协议TCP和UDP是完全独立的两个软件模块,因此各自的端口号也相互独立,如TCP有一个255号端口,UDP也可以有一个255号端口,二者并不冲突。...因此一个完整的网间通信需要一个五元组来标识: (协议,本地地址,本地端口号,远地地址,远地端口号) 这样一个五元组,叫做一个相关(association),即两个协议相同的半相关才能组合成一个合适的相关...从这个例子我们可以看出,使用socket编程几乎有一个模式,即所有的程序几乎毫无例外地按相同的顺序调用相同的函数。...),并定义了我们自己的两个数据结构及其实例变量,以及我们提供的函数说明。...当有连接请求到达时,accept()调用将请求连接队列上的第一个客户方套接字地址及长度放入addr 和addrlen,并创建一个与s有相同特性的新套接字号。
由于TCP/IP传输层的两个协议TCP和UDP是完全独立的两个软件模块,因此各自的端口号也相互独立,如TCP有一个255号端口,UDP也可以有一个255号端口,二者并不冲突。...因此一个完整的网间通信需要一个五元组来标识: (协议,本地地址,本地端口号,远地地址,远地端口号) 这样一个五元组,叫做一个相关(association),即两个协议相同的半相关才能组合成一个合适的相关...当有连接请求到达时,accept()调用将请求连接队列上的第一个客户方套接字地址及长度放入addr 和addrlen,并创建一个与s有相同特性的新套接字号。新的套接字可用于处理服务器并发请求。...从这个例子我们可以看出,使用socket编程几乎有一个模式,即所有的程序几乎毫无例外地按相同的顺序调用相同的函数。...),并定义了我们自己的两个数据结构及其实例变量,以及我们提供的函数说明。
三种最流行的套接字类型是:stream, datagram, raw。stream和datagram套接字可以直接与TCP协议进行接口,而raw套接字则接口到IP协议。但套接字并不限于TCP/IP。...二、套接字模块 套接字模块是一个非常简单的基于对象的接口,它提供对低层BSD套接字样式网络的访问。使用该模块可以实现客户机和服务器套接字。...要在python 中建立具有TCP和流套接字的简单服务器,需要使用socket模块。利用该模块包含的函数和类定义,可生成通过网络通信的程序。一般来说,建立服务器连 接需要六个步骤。...ra cs.close() 客户端: import socket s=socket.socket() s.connect(('xxx.xxx.xxx.xxx',xxxx)) #与服务器程序ip地址和端口号相同...或者启动服务器程序后,用telnet ip地址 端口号,也可以得到同样结果。
需要利用TCP/IP协议族来帮我们解决问题。 用IP可以唯一标识网络中的主机,协议+端口号唯一标识主机中的应用进程。 进程指的是,运行的程序以及运行程序用到的资源整体就称之为进程。 ...s.makefile()创建一个与该套接字相关连的文件 用网络调试助手时,端口号会一直变动。 ...重新运行此程序,端口号可能会发送变化。一个UDP网络程序,可以绑定信息(IP,Ports)。如果绑定成功,那么操作系统用这个端口号来进行区别收到的网络数据是否是此进程的。 ...知道”子网掩码”,我们就能判断,任意两个IP地址是否处在同一个子网络。...方法是将两个IP地址与子网掩码分别进行AND运算(两个数位都为1,运算结果为1,否则为0),然后比较结果是否相同,如果是的话,就表明它们在同一个子网络中,否则就不是。
IP地址和端口号,不清楚自己端口号的可以到C运行里面输入 cmd /k ipconfig,这样就可以找到自己的端口号了,之后获取需要传输的数据,发送,接收,再关闭套接字就好了。...,所以我们需要去绑定端口号。...广播 socket只需要发送1次UDP数据,就可以发送给本局域网中的任何一台电脑发送相同的数据 import socket # 创建UDP套接字 udp_socket = socket.socket...,否则客户端找不到这个服务器 TCP客户端一般不绑定,因为是主动链接服务器,所以只要确定好服务器的ip、port等信息就好,本地客户端可以随机 TCP服务器中通过listen可以将socket创建出来的主动套接字变为被动的...关闭accept返回的套接字意味着这个客户端已经服务完毕 当客户端的套接字调用close后,服务器端会recv解堵塞,并且返回的长度为0,因此服务器可以通过返回数据的长度来区别客户端是否已经下线 握手
但是这种协议却是快捷的,比如CS(半条命)游戏就是基于UDP协议,否则我们估计 要玩一次游戏后就会把机子砸了,所以我们可以看到游戏有时会失帧。 ...我们先了解一下DatagramSocket和DatagramPacket类 DatagramSocket类: 构造方法: DatagramSocket(): 表示创建一个默认的套接字...InetAddress iad): 表示创建一个套接字,绑定到特定的端口号及指定地址 DatagramSocket(SocketAddress sad); 表示创建一个套接字,绑定到特定的套接字地址... 小提示:所谓的本地地址我们可以这样来理解,我们通过“控制面板-本地连接-支持”中可以看到一个IP地址,这就是本地的IP地址,也暂且理解为本地地址。 ...// 创建接收方的套接字,并制定端口号和IP地址 DatagramSocket getSocket = new DatagramSocket(port, ip);
我们几乎不会用到“0.0.0.0″和“127.0.0.1”这样的IP地址。...,SOCK_STREAM,0) 创建数据报套接字(UDP),如:m_socket = socket(AF_INET,SOCK_DGRAM,0) 在成功创建套接字之后,需要填充sockaddr_in结构体作为网络函数参数...struct in_addr sin_addr;//IP地址 unsigned char sin_zero[8];// sockaddr与sockaddr_in两个数据结构保持大小相同而保留的空字节...,是设计更加合理 (3)套接字创建之后很重要的一步是填充sockaddr_in,绑定的成功与否与该结构体具有紧密的关系。...(4)如果是基于人机交互的实现模式,UDP通信之前的工作可以分成几个模块,而这些模块,注意要共用一个套接字(如在类中定义一个SOCKET变量)。
领取专属 10元无门槛券
手把手带您无忧上云