文件
tcp_server/tcp_test.py
T
wangchuanli 52fa7c975e feat: 添加 TCP 服务端与客户端示例项目
包含基于 Python socket 的多线程 TCP 服务端、交互式客户端、README 文档、MIT 许可证及 .gitignore。
2026-08-24 10:59:43 +08:00

64 行
2.4 KiB
Python

import socket
def tcp_client():
# --- 配置区域 ---
# 服务器的 IP 地址或域名
HOST = '127.0.0.1' # 本地测试用;跨机器测试请改为服务端实际 IP
# 服务器的端口号
PORT = 30008 # 请确保此端口与服务器监听的端口一致
# -----------------
try:
# 1. 创建 TCP Socket 对象
# AF_INET 表示使用 IPv4 地址,SOCK_STREAM 表示使用 TCP 协议
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2. 连接到服务器
print(f"正在尝试连接到 {HOST}:{PORT} ...")
client_socket.connect((HOST, PORT))
print("✅ 连接成功!请输入要发送的消息(输入 'exit' 退出):")
# 3. 循环发送消息
while True:
message = input("我: ")
# 检查是否退出
if message.lower() == 'exit':
print("正在断开连接...")
break
# 4. 发送数据
# 网络传输的是字节流,所以需要将字符串编码为 bytes
# Netty服务端期望以换行符结尾的消息
client_socket.sendall(message.encode('utf-8')+b'\n')
print("📤 消息已发送。")
# 5. 接收服务端的响应
try:
# 设置超时时间,避免无限等待
client_socket.settimeout(5.0)
response = client_socket.recv(4096)
if response:
# 去除末尾的换行符并解码
response_str = response.decode('utf-8').rstrip('\n')
print(f"📥 服务器响应: {response_str}")
else:
print("⚠️ 服务端未返回响应")
except socket.timeout:
print("⚠️ 等待服务端响应超时")
finally:
# 恢复默认阻塞模式
client_socket.settimeout(None)
except ConnectionRefusedError:
print(f"❌ 连接失败:无法连接到 {HOST}:{PORT}。请确认服务器是否已启动且端口正确。")
except Exception as e:
print(f"❌ 发生错误:{e}")
finally:
# 5. 关闭连接
# 无论是否发生异常,都确保套接字被关闭
client_socket.close()
print("连接已关闭。")
if __name__ == "__main__":
tcp_client()