本节内容:
一、网络基础知识
二、socket概念及相关语法
2.1socket概念
2.2socket解释
2.3socket模块功能介绍
2.4socket粘包问题
2.5Socket多并发
一、网络基础知识
1、OSI七层模型(具体自己百度)
2、TCP/IP四层参考模型(具体自己百度)
他们的对应网络协议如下:协议
今天我们说的socket就在传输层:TCP/IP三次握手建立连接
客户/服务器架构
服务器是一个软件或硬件,用于提供客户需要的“服务”。服务器存在的唯一目的就是等待客户的请求,给这些客户服务,然后再等待其它的请求。另一方面,客户连上一个(预先已知的)服务器,提出自己的请求, 发送必要的数据,然后就等待服务器的完成请求或说明失败原因的反馈。服务器不停地处理外来的请求,而客户一次只能提出一个服务的请求,等待结果。然后结束这个事务。客户之后也可以再提出其它的请求,只是,这个请求会被视为另一个不同的事务了。
二、socket概念及相关语法
socket是TCP/IP中传输层中TCP、UDP的实现方式,用socket编程,可以实现TCP UDP的通信。有一个比较好的比喻方式:socket就是一条管子,连接两段,而TCP、UDP就是管子中的东西
2.1socket概念
socket本质上就是在2台网络互通的电脑之间,架设一个通道,两台电脑通过这个通道来实现数据的互相传递。 我们知道网络 通信 都 是基于 ip+port 方能定位到目标的具体机器上的具体服务,操作系统有0-65535个端口,每个端口都可以独立对外提供服务,如果 把一个公司比做一台电脑 ,那公司的总机号码就相当于ip地址, 每个员工的分机号就相当于端口, 你想找公司某个人,必须 先打电话到总机,然后再转分机 。
建立一个socket必须至少有2端, 一个服务端,一个客户端, 服务端被动等待并接收请求,客户端主动发起请求, 连接建立之后,双方可以互发数据
来看个socket的传递模式:
2.2socket解释
socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求。
socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,对于文件用【打开】【读写】【关闭】模式来操作。socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭)
socket和file的区别:
- file模块是针对某个指定文件进行【打开】【读写】【关闭】
- socket模块是针对 服务器端 和 客户端Socket 进行【打开】【读写】【关闭】
我们来看一个简单的socket通信程序:
1 #服务器端 2 3 import socket 4 server = socket.socket() 5 server.bind(('localhost',6969)) #绑定要监听端口 6 server.listen(5) #监听 7 8 print("我要开始等电话了") 9 while True: 10 conn, addr = server.accept() # 等电话打进来 11 # conn就是客户端连过来而在服务器端为其生成的一个连接实例 12 print(conn, addr) 13 print("电话来了") 14 count = 0 15 while True: 16 data = conn.recv(1024) 17 print("recv:",data) 18 if not data: 19 print("client has lost...") 20 break 21 conn.send(data.upper()) 22 count+=1 23 if count >10:break 24 25 server.close()