套接字

Linux TCP套接字选项 之 SO_REUSEADDR && SO_REUSEPORT

夙愿已清 提交于 2019-12-02 14:36:36
说明 前面从stackoverflow上找了一篇讲这两个选项的文章,文章内容很长,读到最后对Linux中的这两个选项还是有些迷茫,所以重新写一篇文章来做一个总结; 本文只总结TCP单播部分,并且只讨论该选项的bind()系统调用部分,UDP,组播,开启选项之后数据包的调度等不做讨论; man手册中对这两个套接字的描述 SO_REUSEADDR SO_REUSEADDR Indicates that the rules used in validating addresses supplied in a bind(2) call should allow reuse of local addresses. For AF_INET sockets this means that a socket may bind, except when there is an active listening socket bound to the address. When the listening socket is bound to INADDR_ANY with a specific port then it is not possible to bind to this port for any local address. Argument is an integer boolean

SOCKET CAN的理解

强颜欢笑 提交于 2019-12-02 14:33:25
转载请注明出处:http://blog.csdn.net/Righthek 谢谢! CAN总线原理 由于Socket CAN涉及到CAN总线协议、套接字、Linux网络设备驱动等。因此,为了能够全面地了解Socket CAN的原理。我们需要了解以下几个方面的知识点: (1)CAN总线协议; (2)Socket原理; (3)Linux网络设备驱动; 当熟悉以下三个方面的知识点后,我们再去分析基于Linux的Socket CAN的驱动。这样的话理解起来更加容易、易懂。 (4)Socket CAN的驱动; 一、CAN总线协议 由于CAN总线协议的内容太多,作为博文来说,不适宜很详细的讲解。需要深入了解的朋友们可以Google一下。以下只是作些简要的说明。 CAN是ControllerArea Network(控制器局域网)的缩写。CAN通信协议在1986年由德国电气商博世公司所开发,主要面向汽车的通信系统。现已是ISO国际标准化的串行通信协议。根据不同的距离、不同的网络,可配置不同的速度,最高速度为1MBit/s。 CAN被细分为三个层次: (1)CAN对象层(the object layer); (2)CAN传输层(the transfer layer); (3)CAN物理层(the phyical layer); 对象层和传输层包括所有由ISO/OSI模型定义的数据链路层的服务和功能

套接字选项 之 SO_REUSEADDR && SO_REUSEPORT

泄露秘密 提交于 2019-12-02 14:24:23
说明 本文下面内容基本上是截取自stackoverflow,针对这两个选项,在另外一篇文章中做了总结,请移步<Linux TCP套接字选项 之 SO_REUSEADDR && SO_REUSEPORT> 原文部分翻译 基本知识点 TCP/UDP连接是由一个五元组(如下)标识的,不允许存在多个连接具有完全相同的五元组,否则无法对它们进行区分; {<protocol>, <src addr>, <src port>, <dest addr>, <dest port>} protocol-协议通过socket()函数在创建套接字时设置; srcaddr:srcport-源地址和源端口通过bind()函数设置; destaddr:destport-目的地址和目的端口通过connect()函数设置; 尽管UDP是无连接协议,但是仍然允许它调用connect()建立连接; 在无连接模式下工作,UDP套接字没有显示的绑定地址端口,系统将会在套接字第一次发送数据时自动绑定,否则UDP无法接收到任何应答数据;对于未显示绑定的TCP套接字也是一样的,在建立连接之前会系统会自动绑定地址端口; 如果显示的绑定套接字,可以将绑定端口设置为0,意味着绑定”任何端口”,由于套接字不能真正绑定到所有端口,所以在这种情况下,系统必须选择特定的端口(通常来自预定义的、特定于OS的源端口范围)。源地址也可以设置为通配符

六种Socket I/O模型幽默讲解

江枫思渺然 提交于 2019-12-02 10:23:00
六种Socket I/O模型幽默讲解 https://www.cnblogs.com/jikebiancheng/p/6225009.html 原贴已经找不到了.. 老陈有一个在外地工作的女儿,不能经常回来,老陈和她通过信件联系。他们的信会被邮递员投递到他们的信箱里。 这和Socket模型非常类似。下面就以此为例讲解Socket I/O模型。 零:阻塞模型 老陈非常想看女儿的信,以至于他什么都不做,就站在门口等。直到接到邮递员给他的信件才开心的看信回信。 这就是阻塞模型,进程阻塞在socket的接收函数上。 一:select模型 但是不吃不喝一直站门口等着总不行吧。所以他每隔10分钟就下楼检查信箱,看是否有女儿的信 。 在这种情况下,“下楼检查信箱“ 然后回到楼上耽误了老陈太多的时间,以至于老陈无法做其他工作。 select模型和老陈的这种情况非常相似:周而复始地去检查…… 如果有数据……接收/发送 ……. 服务器的几个主要动作如下: 创建监听套接字,绑定,监听; 创建工作者线程; 创建一个套接字数组,用来存放当前所有活动的客户端套接字,每accept一个连接就更新一次数组; 接受客户端的连接。 二:WSAAsyncSelect 异步选择模型 后来,老陈使用了微软公司的新式信箱。这种信箱非常先进,一旦信箱里有新的信件,盖茨就会给老陈打电话:喂,大爷,你有新的信件了!从此

Tcp/Ip Http Socket的区别

╄→гoц情女王★ 提交于 2019-12-02 07:17:10
我知道IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对应于应用层,三者从本质上来说没有可比性,socket则是对TCP/IP协议的封装和应用(程序员层面上)。也可以说,TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,“我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如果没有应用层,便无法识别数据内容。如果想要使传输的数据有意义,则必须使用到应用层协议。应用层协议有很多,比如HTTP、FTP、TELNET等,也可以自己定义应用层协议。WEB使用HTTP协议作应用层协议,以封装HTTP文本信息,然后使用TCP/IP做传输层协议将它发到网络上。” 而我们平时说的最多的socket是什么呢,实际上socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API)。通过Socket,我们才能使用TCP/IP协议。实际上,Socket跟TCP/IP协议没有必然的联系。Socket编程接口在设计的时候,就希望也能适应其他的网络协议。所以说,Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,从而形成了我们知道的一些最基本的函数接口,比如create、listen、connect、accept、send、read和write等等。网络有一段关于socket和TCP

Day8 - Python网络编程 Socket编程

偶尔善良 提交于 2019-12-02 06:24:21
Socket语法及相关 socket概念 socket本质上就是在2台网络互通的电脑之间,架设一个通道,两台电脑通过这个通道来实现数据的互相传递。 我们知道网络 通信 都 是基于 ip+port 方能定位到目标的具体机器上的具体服务,操作系统有0-65535个端口,每个端口都可以独立对外提供服务,如果 把一个公司比做一台电脑 ,那公司的总机号码就相当于ip地址, 每个员工的分机号就相当于端口, 你想找公司某个人,必须 先打电话到总机,然后再转分机 。 建立一个socket必须至少有2端, 一个服务端,一个客户端, 服务端被动等待并接收请求,客户端主动发起请求, 连接建立之后,双方可以互发数据。 A network socket is an endpoint of a connection across a computer network . Today, most communication between computers is based on the Internet Protocol ; therefore most network sockets are Internet sockets . More precisely, a socket is a handle (abstract reference) that a local program can pass

写一个基于TCP协议套接字,服务端实现接收客户端的连接并发

ε祈祈猫儿з 提交于 2019-12-02 02:35:33
''' 写一个基于TCP协议套接字,服务端实现接收客户端的连接并发 ''' client import socket import time client = socket.socket() client.connect( ('127.0.0.1', 9527) ) print('启动客户端...') while True: client.send(b'hello') data = client.recv(1024) print(data) time.sleep(1) server ''' 服务端的工作: 1.接收客户端的请求 2.24小时不间断提供服务 3.实现并发 ''' import socket import time from threading import Thread server = socket.socket() server.bind( ('127.0.0.1', 9527) ) server.listen(5) print('启动服务端...') # 线程任务,执行接收客户端消息与发送消息给客户端 def working(conn): while True: try: data = conn.recv(1024) if len(data) == 0: break print(data) time.sleep(1) conn.send(data.upper()

超级马里奥这个系统开发流程

两盒软妹~` 提交于 2019-12-02 02:10:02
关于超级马里奥这个APP开发的要求,可以问阮生(181微4289电8881)可以开发源码,毕竟是我。现成当然可以快速上线,流程我们以后再详谈。 端口号 在同一台主机或设备上,可能有多个进程同时在使用TCP或UDP协议,端口号的作用就是区分这些不同的进程,即每个进程使用各自不同的端口号。 对于TCP协议和UDP协议,端口号都是用unsigned short类型表示,即端口号的范围为0-65535,这65536个端口号被分为3段: 众所周知端口(well-known port):范围为0-1023,这些端口被赋予了专用功能,如FTP的21端口、Web的80端口等,应用程序不能将它们用作其他功能 已登记端口(registered port):范围为1024-49151 临时端口:范围为49152-65535 well-known端口在Unix系统中称为保留端口,使用保留端口的服务器程序,必须以root用户启动运行。 套接字对 TCP套接字对是定义TCP连接两个端点的四元组,包括:本地IP地址、本地端口号、对端IP地址、对端端口号,每个端点的IP地址和端口号通常称为一个套接字。 TCP套接字对可用于唯一标识一个网络中的TCP连接。 套接字地址结构 大多数套接字API都需要一个指向套接字地址结构的指针作为函数参数,每个协议族都定义它自己的套接字地址结构,这些结构的名字均以sockaddr

TCP下的套接字与并发编程

自古美人都是妖i 提交于 2019-12-02 00:53:48
# 服务端.py import socket server = socket.socket() server.bind(('127.0.0.1',9999)) server.listen(5) while True: conn,addr = server.accept() while True: try: data = conn.recv(1024).decode('utf-8') if len(data) == 0: break print(data) msg = input('请输入消息:').strip() conn.send(msg.encode('utf-8')) except Exception as e : print(e) break conn.close() # 客户端.py from threading import Thread import socket client = socket.socket() client.connect(('127.0.0.1',9999)) def func(name): while True: msg = input('输入消息:').strip() if len(msg) == 0:break msg1 = f"{name}发来消息:{msg}" client.send(msg1.encode('utf-8')) data

unix网络编程中的unp.h

被刻印的时光 ゝ 提交于 2019-12-02 00:25:35
/* Our own header. Tabs are set for 4 spaces,not 8 */ #ifndef __unp_h #define __unp_h #include "/usr/lib/perl5/5.8.0/i386-linux-thread-multi/CORE/config.h" /* configuration options for current OS */ /* "../config.h" is generated by configure */ /* If anything changes in the following list of #includes,must change acsite.m4 also,for configure's tests */ #include<sys/types.h> /* basic system data types */ #include<sys/socket.h> /* basic socket definations */ #include<sys/time.h> /* timeval{} for select() */ #include<time.h> /* timespec{} for pselect() */ #include<netinet/in.h> /* sockaddr_in{}