套接字

Python的多线程(二)

坚强是说给别人听的谎言 提交于 2019-11-26 14:04:17
Python的多线程 1、多任务的概念 1.1 单任务 一个一个完成任务 1.2 多任务 同一时间内执行多个任务 1.3 并发和并行 1.3.1 并行 一起执行 1.3.2 并发 任务的交替进行 2、进程、线程与协程 2.1 进程 进程:是系统进行资源分配的基本单位。 进程:动态的概念,运行起来的程序,包括程序,以及运行程序所需要的计算机资源等。 程序:静态的概念,我们写的.py或.go等,都是程序。 2.1.1 进程状态 3、网络通信概述 3.1网络的定义 网络:辅助双方或者多方能够连接一起的工具,用来进行数据交换 协议:一种约定俗成的规定 TCP/IP协议:计算机遵守的网络通信协议 3.2 端口 端口:个数是2的16次方(0-65535)端口编号 端口是数据发出和接收的入口 端口的目的:通过端口号找到对应的进程,完成数据的通信。 著名端口(0-1023)不允许使用除了这些之外都能使用 动态端口(1024-65535)可以使用 3.3 IP IP地址:标记网络中唯一的一台设备的一串数字,例如192.168.1.1 在本地局域网是唯一的 注意:127.0.0.1 代表的是本机的IP地址 4、socket() 简称:套接字,是进程之间进行通信的一种方式 实现了不同主机之间的进程通信,我们现在使用的大多数的服务:qq、网络浏览等都是基于socket()完成通信的 4.1

socket套接字

好久不见. 提交于 2019-11-26 14:02:03
1、socket概念 图片位置 2、理解socket Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。 2.1站在人的角度看待socket模块 socket就是一个模块。通过调用模块中已经实现的方法建立两个进程之间的连接和通信。要确定一个计算机要有ip地址和port端口,因此socket也可以说成ip+port。 因为ip是用来标识互联网中的一台主机的位置,而port是用来标识这台机器上的一个应用程序。 所以我们只要确立了ip和port就能找到一个应用程序,并且使用socket模块来与之通信。 3、套接字(socket)的发展史 基于文件型的和基于网络型 3.1基于文件类型的套接字家族:AF_UNIX 套接字家族的名字:AF_UNIX unix一切皆文件,基于文件的套接字调用的就是底层的文件系统来取数据,两个套接字进程运行在同一机器,可以通过访问同一个文件系统间接完成通信 3.2 基于网络类型的套接字家族名字:AF_INET (还有AF_INET6被用于ipv6,还有一些其他的地址家族,不过,他们要么是只用于某个平台,要么就是已经被废弃,或者是很少被使用,或者是根本没有实现

【网络编程】 -- 2019-08-08 18:01:52

给你一囗甜甜゛ 提交于 2019-11-26 13:51:33
原文: http://106.13.73.98/__/1/ 目录 1.socket层 2.理解socket 3.套接字的发展史 4.网络基础 5.socket基本操作 6.socket进阶 7.黏包 8.解决黏包 8.socket的更多方法 1.socket层 ![在这里插入图片描述](http://106.13.73.98/media/ai/2019-03/5ccf086a-baa7-4268-a9f9-a50fb74136b7.png) 2.理解socket socket是应用层与TCP/IP协议族的中间软件抽象层,它是一组接口。在设计模式中,socket其实就是一个面膜,它把复杂的TCP/IP协议族隐藏在socket接口后面,对于用户来说,一组简单的接口就是全部,让socket去组织数据,以符合指定的协议。 3.套接字的发展史 套接字起源于20世纪70年代 加利福尼亚 大学伯克利分校版本的Unix,即人们所说的BSD Unix。因此,有时人们也把套接字称为“伯克利套接字”或“BSD套接字”。一开始,套接字被设计用在同一台主机上多个应用程序之间的通讯,这也被称为进程间通讯或IPC。套接字有两种(或者称为有两个种族),分别是基于文件型的和基于网络型的。 基于文件类型的套接字家族:AF_UNIX unix下一切皆文件,基于文件的套接字调用的就是底层的文件系统来获取数据

网络编程|套接字(socket模块)

只谈情不闲聊 提交于 2019-11-26 13:45:00
  网络编程是计算机之间的数据交互。数据传输的大致过程是,计算机A与计算机B通信。计算机A从本机的应用层,传输层,网络层,数据链路层和物理链路层发出信息,通过网络,传输到计算机B,通过计算机B的物理链路层,数据链路层,网络层,传输层到达应用层的应用程序。这也说明,通信本质上应用程序之间的数据交互。   数据从应用层到物理链路层有很多协议,想要发出信息,就必须遵守这些协议的规范。套接字socket模块就帮助开发者解决这中问题。   套接字有两种其中,一种是文件类型的套接字:AF_UNIX,一种是网络类型的套接字:AF_INET。文件类型的套接字可以应用在Linux系统,Linux系统一切皆文件。使用python经行网络编程,使用更多的是AF_INET网络类型的套接字。 TCP通信 socket通信    通信代码如下图。整个通信先开启服务端,服务端运行到接受客服端链接时暂停,等待客户端发来的信号开始执行之后的程序。这时启动客户端,客户端发送信息,服务端接受到后从对象中取出数据,最大1024个字节,然后打印hello回复信息。关闭通信。客服端也一样,收到信息。进行打印,关闭通信。其中服务端有一个连接池的概念,这个链接池限制链接客户端的个数。 # 服务端 import socket # 调用socket模块 server = socket.socket() # 创建一个套接字对象

python | 网络编程(socket、udp、tcp)

有些话、适合烂在心里 提交于 2019-11-26 12:18:10
一、套接字 socket 1.1 作用:实现不同主机间的进程间通信(不同电脑、手机等设备之间收发数据) 1.2 分类:udp、tcp 1.3 创建 socket 1 import socket 2 socket.socket(AddressFamily, Type)   AddressFamily:AF_INET:用于网络间进程通信;AF_UNIX:用于同一台机器中   Type:SOCK_DGRAM:upd 协议使用;SOCK_STREAM:tcp 协议使用 二、upd socket 2.1 创建 udp socket,并使用其收发数据 1 import socket 2 3 # 创建 udp 套接字 4 udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 5 6 # 绑定本地信息,bind后面的()里一定要是个元组!!元组!! 7 udp_socket.bind(("", 7890)) 8 9 # 获取要发送的内容 10 send_msg = input("请输入要发送的内容:") 11 12 # 使用 udp 发送数据, 13 udp_socket.sendto(send_msg.encode("utf-8"), ("192.168.xxx.xxx", 9090)) 14 15 # 接收数据

socket套接字

六眼飞鱼酱① 提交于 2019-11-26 11:05:00
什么是套接字? 一组接口 作用于应用层与传输层之间 隐藏了传输层下面复杂的TCP/IP协议的实现 基于TCP协议的socket 流式协议,面向流的通信是无消息保护边界的 会将数据少、时间间隔短的数据一次性打包发送 可靠但粘包 数据不会丢,包没收完,会继续上次继续接收数据 数据是可靠的 只有TCP有粘包现象 粘包问题: 产生原因: 发送的数据小,时间段,TCP会议会自动合成数据,造成粘包。(发送方的缓存机制) 接收数据只接收一部分,下次接收会继续上次接收数据。(接收方的缓存机制) 只发生在TCP协议。 问题的根源: ​ 接收方不知道消息的大小 解决方案: 发送方提供数据大小 利用struct模块调用.pack将长度打包header报头发送 接收方利用struct调用.unpack解包header报头取出长度 案例:利用subprocess模拟终端命令输入 客户端 服务端: 1、连接服务 1、开启服务 2、发送命令 2、接收客户端命令 3、接收header报头 3、利用subprocess返回命令结果res 4、struct.unpack header报头得到字典长度 4、构造res数据的字典 5、利用字典长度接收字典 5、序列化字典,得出序列化后的字典长度 6、拿出字典里面真实数据长度 6、利用struct模块构造字典长度的header头 7、分段接收真实数据 7、发送header头

socket(套接字) - 解决粘包问题 # 28

走远了吗. 提交于 2019-11-26 10:59:10
TCP协议类似打电话UDP协议类似发短信今日内容:1."socket" 套接字 1 """ 2 socket套接字 3 """ 4 1.127.0.0.1本机回环地址, 5 只能识别自己,其他人无法访问 6 2.send与recv对应, 7 不要出现两边都是相同的情况 8 3.recv是跟内存要数据, 9 至于数据的来源,你无需考虑 10 4.TCP特点:(自动优化机制) 11 会将数据量较小的并且时间间隔较短的数据,打包好,一次性发送给对方(造成粘包的原因之一) 12 13 重点************* 14 1.socket简单版本: 15 服务器: 16 import socket 17 # 1.买手机,创建一个对象 18 server = socket.socket() 19 # 2.插卡 ,绑定IP+port 20 server.bind(("127.0.0.1",8089)) 21 # 3.监听电话 22 server.listen() # 参数为半连接数,为了保护传输路径 23 # 4.拨打电话 ,建立连接,获取连接地址和用户 24 client,addr = server.accpet() 25 # 5.通话,听,收 26 date = client.recv(1024) 27 date = date.decode('utf-8') 28 print(date)

网络编程二

余生长醉 提交于 2019-11-26 10:57:33
一.socket套接字 server端 import socket server= socket.socket() server.bind(('127.0.0.1',8080)) #把地址绑定到套接字 server.listen() #监听链接 conn,addr = server.accept() #接受客户端链接 ret = conn.recv(1024) #接收客户端信息 print(ret) #打印客户端信息 conn.send(b'hi') #向客户端发送信息 conn.close() #关闭客户端套接字 sk.close() #关闭服务器套接字(可选) View Code client端 import socket client = socket.socket() # 创建客户套接字 client.connect(('127.0.0.1',8898)) # 尝试连接服务器 client.send(b'hello!') ret = client.recv(1024) # 对话(发送/接收) print(ret) client.close() # 关闭客户套接字 View Code 127.0.0.1 本机回还地址 只能自己访问自己 别人无法访问 服务器与客户端的send与recv要一一对应 二.粘包问题 udp粘包问题出现的原因 : 使用了优化方法(Nagle算法)

d28 scoket套接字 struct模块

泪湿孤枕 提交于 2019-11-26 10:46:10
scoket套接字 Socket是应用层与 TCP/IP协议族通信的中间软件抽象层,它是一组接口 服务器端先初始化 Socket,然后与端口绑定 (bind),对端口进行监听 (listen),调用 accept阻塞,等待客户端连接。在这时如果有个客户端初始化一个 Socket,然后连接服务器 (connect),如果连接成功,这时客户端与服务器端的连接就建立了。客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束 scoket模块 import socket # 生成对象 server = socket.socket() # 绑定ip和端口 server.bind(('127.0.0.1',8080)) #绑定参数为一个元组 #127.0.0.1这叫回送地址 表示电脑本身 端口 为普通整数 一般为8000以上 # 监听 半连接池 server.listen(5) # 接收链接请求 # 第一个是表示客户端的socket 第二个客户端的地址信息 conn,addr = server.accept() #接收字节 data = conn.recv(1024) print(data) # 发送数据 conn.send(b'hello world') # 关闭 conn.close() # 关机 server.close()

Socket 套接字和解决粘包问题

允我心安 提交于 2019-11-26 10:33:46
---恢复内容开始--- Socket 套接字: 什么是socket: Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实 就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口 就是全部,让Socket去组织数据,以符合指定的协议。 socket在OSI模型中的位置 二为什么需要socket 在标准的OIS模型中并没有规定说必须有socket层,也就是说不使用socket也能完成通讯,是的,的确如此! 那为什么需要socket呢?一个字 懒,程序员都是懒的! 我们发现还没有开始实现应用程序逻辑,就需要花大把时间来实现各种协议,太特么费事儿了,就有人专门把协议中一堆复杂的事情进行了封装,于是socket就诞生了! 有了socket以后,无需自己编写代码实现三次握手,四次挥手,ARP请求,打包数据等等,socket已经封装好了,只需要遵循socket的规定去编程,写出的程序自然就是遵循tcp/udp标准的。 三socket的发展: 套接字起源于 20 世纪 70 年代加利福尼亚大学伯克利分校版本的 Unix,即人们所说的 BSD Unix。 因此,有时人们也把套接字称为“伯克利套接字”或“BSD 套接字”。一开始,套接字被设计用在同 一台主机上多个应用程序之间的通讯