什么是 Socket Socket 是应用层与 TCP/IP 协议通信的中间软件抽象层,它是一组接口.在设计模式中,Socket 其实就是一个门面模式,它把复杂的 TCP/IP 协议族隐藏在 Socket 接口后面,对用户来说,一组简单的接口就是全部,让 Socket 去组织数据,以符合指定的协议. 所以,我们无需深入理解 TCP/UDP 协议,socket 已经为我们封装好了,我们只需要遵循 socket 的规定去编程,写出的程序自然就是遵循 TCP/UDP 标准的. 套接字的分类: 基于文件…
UDP协议没有粘包问题,但是缓冲区大小要足够装数据包大小,建议不要超过 512 服务端: # 服务端 import socket server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 数据报协议->udp server.bind(('127.0.0.1', 8080)) # OSError: 一个在数据报套接字上发送的消息大于内部消息缓冲区或其他一些网络限制,或该用户用于接收数据报的缓冲区比数据报小. data, client_a…
目录 一.什么是Scoket 二.套接字发展史及分类 2.1 基于文件类型的套接字家族 2.2 基于网络类型的套接字家族 三.套接字工作流程 3.1 服务端套接字函数 3.2 客户端套接字函数 3.3 公共用途的套接字函数 3.4 面向锁的套接字方法 3.5 面向文件的套接字的函数 四.基于TCP协议的套接字编程(简单) 4.1 服务端 4.2 客户端 五.基于TCP协议的套接字编程(循环) 5.1 服务端 5.2 客户端1 5.3 客户端2 六.地址占用问题 6.1 方法一 6.2 方法二(L…
tcp协议:流式协议(以数据流的形式通信传输).安全协议(收发信息都需收到确认信息才能完成收发,是一种双向通道的通信) tcp协议在OSI七层协议中属于传输层,它上承用户层的数据收发,下启网络层.数据链路层.物理层.可以说很多安全数据的传输通信都是基于tcp协议进行的. 为了让tcp通信更加方便需要引入一个socket模块(将网络层.数据链路层.物理层封装的模块),我们只要调用模块中的相关接口就能实现传输层下面的繁琐操作. 简单的tcp协议通信模板:(需要一个服务端和一个客户端) 服务端: fr…
基于TCP协议的套接字编程(简单) 服务端 import socket server = socket.socket() server.bind( ('127.0.0.1', 9999) ) server.listen(5) conn, addr = server.accept() print(addr) data = conn.recv(1024).decode('utf-8') print(data) conn.send('来自服务端消息:我不好'.encode('utf-8')) conn…
一.TCP套接字 1.low版tcp套接字 服务器端 客户端 2.改进版tcp套接字 服务端 客户端 二.UDP的套接字 服务器 客户端 注:udp的套接字可以支持多个客户端同时访问,但tcp套接字就不行了,那是因为tcp套接字有tcp三次握手四次挥手. 三.recv和recvfrom的区别? 1.提前须知: 1.1tcp是send发送消息,recv接收消息. 1.2udp是sendto发送消息,recvfrom接收消息. 1.3 在我眼里看来send只是发送一个数据对象,所以recv接收的也只…
1.TCP协议 可靠传输,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割. (1)三次握手建链接(2)四次挥手断开链接(3)tcp协议的状态(4)syn洪水攻击与半连接池 1.一开始,建立连接之前服务器和客户端的状态都为CLOSED: 2.服务器创建socket后开始监听,变为LISTEN状态: 3.客户端请求建立连接,向服务器发送SYN报文,客户端的状态变味SYN_SENT: 4.服务器收到客…
一   udp协议网络编程 DNS:将域名解析成ip地址 SOCK_DGRAM:数据报协议,也是udp协议 udp协议的网络编程的一些用法: recvfrom:接收消息,接收的时一个元组,元组里面的元素分别为:一个消息,一个发送者的地址. sendto:发送消息,还要指定发送给谁. 实例: 服务端: import socket server=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) server.bind(('127.0.0.1',8088)…
目录 一.UDP套接字简单示例 1.1 服务端 二.客户端 三.UPD套接字无粘包问题 3.1 服务端 3.2 客户端 四.qq聊天 4.1 服务端 4.2 客户端1 4.3 客户端2 4.4 运行结果 一.UDP套接字简单示例 1.1 服务端 import socket server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 数据报协议->UDP server.bind(('127.0.0.1', 8080)) while Tru…
目录 1. 单对单循环通信 2. 循环连接通信:可连接多个客户端 3. 执行远程命令 4. 粘包现象 4.1 socket缓冲区 4.2 出现粘包的情况: 4.3 解决粘包现象 bytes 1. 单对单循环通信 ​ send() 和recv()不是一一对应的. # 服务端 server.py import socket phone = socket.socket() phone.bind = (('127.0.0.1', 8888)) # 绑定本地回环地址/端口号 phone.listen()…