基于TCP的套接字
【1】方法简介
| server = socket() |
| server.bind() |
| server.listen() |
| inf_loop: |
| conn = server.accept() |
| comm_loop: |
| conn.recv()/conn.send() |
| conn.close() |
| server.close() |
| client = socket() |
| client.connect() |
| comm_loop: |
| client.send()/client.recv() |
| client.close() |
【2】打电话模型
【1.0】基础版
| |
| |
| |
| import socket |
| |
| |
| server = socket.socket() |
| |
| |
| |
| IP = '127.0.0.1' |
| PORT = 8080 |
| server.bind((IP, PORT)) |
| |
| |
| |
| server.listen(5) |
| |
| |
| conn, addr = server.accept() |
| |
| |
| |
| |
| |
| |
| |
| from_to_client_msg = conn.recv(1024) |
| from_to_client_msg = from_to_client_msg.decode('utf-8') |
| print(f'from_to_client_msg :>>>> {from_to_client_msg}') |
| |
| |
| |
| |
| send_to_client_msg = '你好' |
| send_to_client_msg = send_to_client_msg.encode('utf-8') |
| conn.send(send_to_client_msg) |
| |
| |
| conn.close() |
| |
| |
| server.close() |
| import socket |
| |
| |
| client = socket.socket() |
| |
| |
| IP = '127.0.0.1' |
| PORT = 8080 |
| client.connect((IP, PORT)) |
| |
| |
| send_to_server_msg = f'我是客户端' |
| send_to_server_msg = send_to_server_msg.encode('utf-8') |
| client.send(send_to_server_msg) |
| |
| |
| from_server_msg = client.recv(1024) |
| |
| from_server_msg = from_server_msg.decode('utf-8') |
| print(f'from_server_msg :>>>> {from_server_msg}') |
| |
| |
| client.close() |
基础版模版
| |
| |
| from socket import socket |
| |
| |
| server = socket() |
| |
| IP = '127.0.0.1' |
| PORT = 9080 |
| server.bind((IP, PORT)) |
| |
| server.listen(5) |
| |
| conn, addr = server.accept() |
| |
| from_client_lsg = conn.recv(1024) |
| from_client_lsg = from_client_lsg.decode('utf8') |
| print(from_client_lsg) |
| |
| send_to_client_msg = '我是服务端' |
| send_to_client_msg = send_to_client_msg.encode('utf8') |
| conn.send(send_to_client_msg) |
| |
| conn.close() |
| |
| server.close() |
| |
| |
| from socket import socket |
| |
| client = socket() |
| |
| |
| IP = '127.0.0.1' |
| PORT = 9080 |
| client.connect((IP, PORT)) |
| |
| send_to_server_msg = '我是客户端' |
| send_to_server_msg = send_to_server_msg.encode('utf8') |
| client.send(send_to_server_msg) |
| |
| from_server_msg = client.recv(1024) |
| from_server_msg = from_server_msg.decode('utf8') |
| print(from_server_msg) |
| |
| client.close() |
【2.0】循环版
| |
| |
| |
| import socket |
| |
| |
| server = socket.socket() |
| |
| |
| |
| IP = '127.0.0.1' |
| PORT = 8060 |
| server.bind((IP, PORT)) |
| |
| |
| |
| server.listen(5) |
| |
| while True: |
| |
| conn, addr = server.accept() |
| |
| |
| from_to_client_msg = conn.recv(1024) |
| from_to_client_msg = from_to_client_msg.decode('utf-8') |
| print(f'from_to_client_msg :>>>> {from_to_client_msg}') |
| |
| |
| |
| |
| while True: |
| send_to_client_msg = input("请输入需要发送的消息 :>>>> ").strip() |
| if not send_to_client_msg: |
| print(f'当前不能为空!请重新输入!') |
| continue |
| send_to_client_msg = send_to_client_msg.encode('utf-8') |
| conn.send(send_to_client_msg) |
| break |
| |
| conn.close() |
| |
| |
| server.close() |
| import socket |
| |
| while True: |
| |
| client = socket.socket() |
| |
| |
| IP = '127.0.0.1' |
| PORT = 8060 |
| client.connect((IP, PORT)) |
| |
| send_to_server_msg = input("请输入发送的消息 :>>>> ").strip() |
| if not send_to_server_msg: |
| print(f'当前不能为空!请重新输入!') |
| continue |
| send_to_server_msg = send_to_server_msg.encode('utf-8') |
| client.send(send_to_server_msg) |
| |
| |
| from_server_msg = client.recv(1024) |
| |
| from_server_msg = from_server_msg.decode('utf-8') |
| print(f'from_server_msg :>>>> {from_server_msg}') |
| |
| |
| client.close() |
循环版模版
| |
| |
| from socket import socket |
| |
| while True: |
| client = socket() |
| |
| |
| client.connect(('127.0.0.1', 9696)) |
| |
| |
| send_msg = input("请输入消息 :>>>> ").strip() |
| if not send_msg: continue |
| client.send(send_msg.encode('utf-8')) |
| if send_msg == 'q': |
| client.close() |
| break |
| |
| msg = client.recv(1024) |
| print(msg.decode('utf8')) |
| |
| |
| from socket import socket |
| |
| server = socket() |
| |
| server.bind(('127.0.0.1', 9696)) |
| |
| server.listen(5) |
| |
| while True: |
| conn, addr = server.accept() |
| |
| msg = conn.recv(1024) |
| msg = msg.decode('utf8') |
| print(f'msg:>>>{msg}') |
| if msg == 'q': |
| conn.close() |
| break |
| |
| while True: |
| send_msg = input("发送的消息 :>>>> ").strip() |
| if not send_msg: continue |
| conn.send(send_msg.encode('utf8')) |
| break |
| server.close() |
空数据的处理
- TCP协议是水流式协议:传入的数据不能为空,因为水是一直流的,在传输过程中不会对数据进行操作
- UDP协议是数据报协议:传入的数据可为空,在传输过程中UDP会对数据进行内部的拼接和处理
断开链接的影响
- TCP协议是水流式协议:在建立链接过程中,服务端和客户端的链接是一直存在的,断开一方都会对另一方造成影响
- UDP协议是数据报协议:在建立链接过程中,是通过解析对方数据中的ip和端口,再向另一方返回数据的,所以一方发生问题并不会影响到另一方
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!