Python 进阶篇-系列文章全篇
🍑 Linux操作系统与常用命令
🍑 Linux系统性能定时监控升级,源码可复制
🍑 tcp网络程序的实现步骤,看这个就够了
🍑 http请求与响应,tcp3次握手&四次挥手
🍑 模拟浏览器实现,服务端基础框架搭建
🍑 Python进阶:利用线程实现多任务
🍑 Python进阶:进程的状态及基本操作
🍑 Python进阶:一文搞懂迭代器、生成器、协程(附案例)
🍑 数据库:了解MySQL数据类型、SQL命令
🍑 从零开始学SQL:where条件查询与连接
🍑 Python网络开发基础,实现udp聊天器小案例
🍑 多任务版TCP服务端程序开发案例+源码
🍑 【图文教程详解】Ubuntu的两种安装方式
🍑 Python中的深拷贝与浅拷贝
1. tcp简介
-
TCP 面向连接、可靠的、基于字节流的传输控制协议
-
TCP的特点
- 面向连接
- 可靠传输
- 应答机制
- 超时重传
- 错误校验
- 流量管控
-
TCP通信模型
TCP严格区分客户端、服务端
2. tcp网络程序-客户端
-
实现步骤
-
导入模块
-
创建套接字
socket.SOCK_STREAM
-
建立连接
tcp_client_socket.connect( (“服务端ip”, 服务端端口) )
-
发送数据
tcp_client_socket.send(“内容”.encode())
-
接收数据
recv_data = tcp_client_socket.recv(1024)
recv_data 是接收到的数据的二进制
-
关闭连接
-
3. tcp网络程序-服务器
-
导入模块
-
创建套接字
-
绑定端口
-
开启监听(把套接字由主动设置为被动模式)
tcp_server_socket.listen(128) 最大允许128个连接
-
等待客户端连接
new_client_socket,client_ip_port = tcp_server_socket.accept()
new_client_socket 新的套接字,只是服务当前的客户端
client_ip_port 客户端端口和ip地址
-
使用新的套接字接收客户端发送的信息
new_client_socket.recv(1024)
-
关闭新的套接字
new_client_socket.close() 关闭和当前客户端的连接
-
关闭服务器套接字
tcp_server_socket.close() 服务器不再接收新的客户端,老客户端可以继续服务
4. tcp网络程序-服务器增强
-
循环接收多条信息
while True: # recv() 会让程序再次阻塞,收到信息后再接阻塞 recv_data = new_client_socket.recv(1024) # 当接受到数据为 空 的时候,表示客户端已经断开连接了,服务端也要断开 # if len(recv_data)!= 0: # b'xxxx' # 如果recv_data 非空即为真,否则为假 if recv_data: recv_text = recv_data.decode("GBK") print("接收到[%s]的信息:%s" % (str(client_ip_port), recv_text)) else: print("客户端已经断开连接!") break
-
循环接受多个客户端连接
while True: new_client_socket, client_ip_port = tcp_server_socket.accept() print("新客户端来了:%s" % str(client_ip_port)) # 6、收发数据 while True: # recv() 会让程序再次阻塞,收到信息后再接阻塞 recv_data = new_client_socket.recv(1024) # 当接受到数据为 空 的时候,表示客户端已经断开连接了,服务端也要断开 # if len(recv_data)!= 0: # b'xxxx' # 如果recv_data 非空即为真,否则为假 if recv_data: recv_text = recv_data.decode("GBK") print("接收到[%s]的信息:%s" % (str(client_ip_port), recv_text)) else: print("客户端已经断开连接!") break # new_client_socket.close() 表示不能再和当前的客户端通信了 new_client_socket.close()
注意:必须等待第一个客户端断开后,第二个客户端才能有机会连接
案例:文件下载器(一)
-
客户端
目标:
/home/demo/Document/python_projects/day04/1.txt
下载到
/home/demo/Desktop/1.txt1、导入模块
2、创建套接字
3、建立连接
4、接收用户输入的文件名
5、发送文件名到服务端
6、创建文件,并且准备保存
7、接收服务端发送的数据,保存到本地(循环)
8、关闭套接字 -
服务器:
1、导入模块
2、创建套接字
3、绑定端口
4、设置监听,设置套接字由主动为被动
5、接受客户端连接
6、接收客户端发送的文件名
7、根据文件名读取文件内容
8、把读取的内容发送给客户端(循环)
9、关闭和当前客户端的连接
10、关闭服务器
案例:文件下载器(二)
-
with open(“文件名”, 打开方式) as file
file = open(文件名,打开方式)