以下是一个基于Python的TCP应用案例,包含服务器端和客户端的完整代码:
1. TCP服务器端(Server)
功能:接收客户端发送的英文消息,转为大写后返回。
import socket
def tcp_server():
# 创建TCP socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # 防止端口占用
# 绑定IP和端口
server_address = ('127.0.0.1', 8888)
server_socket.bind(server_address)
# 监听连接
server_socket.listen(1)
print("TCP服务器已启动,等待客户端连接...")
try:
while True:
# 接受客户端连接
client_socket, client_address = server_socket.accept()
print(f"客户端 {client_address} 已连接")
try:
while True:
# 接收数据(最大1024字节)
data = client_socket.recv(1024).decode('utf-8')
if not data:
print(f"客户端 {client_address} 断开连接")
break
print(f"收到消息: {data}")
# 转为大写并发送回客户端
response = data.upper()
client_socket.send(response.encode('utf-8'))
except ConnectionResetError:
print("客户端异常断开")
finally:
client_socket.close()
except KeyboardInterrupt:
print("服务器关闭")
finally:
server_socket.close()
if __name__ == '__main__':
tcp_server()
2. TCP客户端(Client)
功能:连接服务器后,从控制台输入英文消息,接收服务器返回的大写结果。
import socket
def tcp_client():
# 创建TCP socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接服务器
server_address = ('127.0.0.1', 8888)
client_socket.connect(server_address)
print("已连接到服务器,输入消息或输入 'exit' 退出")
try:
while True:
# 从控制台输入消息
message = input("请输入英文: ")
if message.lower() == 'exit':
break
# 发送消息到服务器
client_socket.send(message.encode('utf-8'))
# 接收服务器响应
response = client_socket.recv(1024).decode('utf-8')
print(f"服务器返回: {response}")
finally:
client_socket.close()
print("连接已关闭")
if __name__ == '__main__':
tcp_client()
运行步骤
- 启动服务器:先运行服务器端代码(
python server.py
),它会一直等待客户端连接。 - 启动客户端:再运行客户端代码(
python client.py
),输入英文消息后,服务器会返回大写版本。
示例交互
# 客户端控制台
请输入英文: hello world
服务器返回: HELLO WORLD
请输入英文: python
服务器返回: PYTHON
请输入英文: exit
连接已关闭
# 服务器控制台
TCP服务器已启动,等待客户端连接...
客户端 ('127.0.0.1', 12345) 已连接
收到消息: hello world
收到消息: python
客户端 ('127.0.0.1', 12345) 断开连接
关键点说明
- 端口号:示例使用
8888
,需确保未被占用。 - 异常处理:捕获
ConnectionResetError
处理客户端异常断开。 - 退出机制:客户端输入
exit
主动退出循环。 - 字节流处理:TCP传输的是字节流,需用
encode()
/decode()
转换字符串。
这个案例展示了TCP协议的核心功能:可靠的双向通信。你可以在此基础上扩展更多功能(如多线程处理多个客户端)。