推荐答案
// www.javascriptcn.com code example
import socket
# 创建 TCP 服务器
def start_tcp_server(host='127.0.0.1', port=65432):
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as server_socket:
server_socket.bind((host, port))
server_socket.listen()
print(f"Server listening on {host}:{port}")
conn, addr = server_socket.accept()
with conn:
print(f"Connected by {addr}")
while True:
data = conn.recv(1024)
if not data:
break
conn.sendall(data)
# 创建 TCP 客户端
def start_tcp_client(host='127.0.0.1', port=65432):
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as client_socket:
client_socket.connect((host, port))
client_socket.sendall(b'Hello, server')
data = client_socket.recv(1024)
print(f"Received {data.decode()} from server")
# 示例用法
if __name__ == "__main__":
import threading
server_thread = threading.Thread(target=start_tcp_server)
server_thread.start()
start_tcp_client()本题详细解读
1. 创建 TCP 服务器
- socket.socket(socket.AF_INET, socket.SOCK_STREAM): 创建一个 TCP 套接字。
AF_INET 表示使用 IPv4 地址,SOCK_STREAM 表示使用 TCP 协议。
- bind((host, port)): 将套接字绑定到指定的主机和端口。
- listen(): 使服务器开始监听传入的连接请求。
- accept(): 接受客户端的连接请求,并返回一个新的套接字对象
conn 和客户端地址 addr。
- recv(1024): 从客户端接收数据,最多接收 1024 字节。
- sendall(data): 将数据发送回客户端。
2. 创建 TCP 客户端
- connect((host, port)): 连接到指定的服务器地址和端口。
- sendall(b'Hello, server'): 向服务器发送数据。
- recv(1024): 从服务器接收数据,最多接收 1024 字节。
3. 多线程处理
- 使用
threading.Thread 来启动服务器线程,以便客户端可以在服务器启动后立即连接。
4. 注意事项
- 服务器和客户端需要在不同的线程或进程中运行,以避免阻塞。
- 在实际应用中,可能需要处理更多的异常情况,如连接中断、超时等。
- 数据接收和发送时,需要注意数据的编码和解码,通常使用
encode() 和 decode() 方法。