Socket实现套接字通信
套接字工作流程:
一、简单socket通信
①服务端
import socket # 1 买手机 phone = socket.socket() # 2 绑定手机卡 phone.bind(('127.0.0.1', 8080)) # 3 开机 phone.listen(5) # 4 等电话连接 conn, addr = phone.accept() # 5 收发消息 data = conn.recv(1024) # 1、单位:bytes 2:1024代表最大接收1024个bytes print('客户端的数据', data) conn.send(data.upper()) # 6 挂电话 conn.close() # 7 关机 phone.close()
②客户端
import socket # 1 买手机 phone = socket.socket() # 2 拨号 phone.connect(('127.0.0.1', 8080)) # 3 发收数据 phone.send('hello'.encode('utf-8')) data = phone.recv(1024) print(data) # 4 关机 phone.close()
先运行服务端代码、再运行客户端代码,打印的结果:
服务端:
客户端:
二、通信循环
①服务端
import socket phone = socket.socket() phone.bind(('127.0.0.1', 8080)) phone.listen(5) conn, addr = phone.accept() # 通信循环 while True: try: data = conn.recv(1024) # 1、单位:bytes 2:1024代表最大接收1024个bytes # 针对于Linux系统 if not data: break print('客户端的数据', data) conn.send(data.upper()) except ConnectionResetError: break conn.close() phone.close()
②客户端
import socket phone = socket.socket() phone.connect(('127.0.0.1', 8080)) while True: msg = input('>>>:').strip() if not msg: continue phone.send(msg.encode('utf-8')) data = phone.recv(1024) print(data.decode('utf-8')) phone.close()
先运行服务端代码、再运行客户端代码,打印的结果:
服务端:
客户端:
三、链接循环
①服务端
import socket phone = socket.socket() phone.bind(('127.0.0.1', 8080)) phone.listen(5) # 链接循环 while True: conn, addr = phone.accept() # 通信循环 while True: try: data = conn.recv(1024) # 1、单位:bytes 2:1024代表最大接收1024个bytes # 适用于Linux系统 if not data: break print('客户端的数据', data) conn.send(data.upper()) except ConnectionResetError: break conn.close() phone.close()
②客户端
import socket phone = socket.socket() phone.connect(('127.0.0.1', 8080)) while True: msg = input('>>>:').strip() if not msg: continue phone.send(msg.encode('utf-8')) data = phone.recv(1024) print(data.decode('utf-8')) phone.close()
四、模拟ssh远程执行命令
服务端:
客户端:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现