设计基于流套接字的客户机/服务器通信程序。要求如下: (1)分别编写服务端程序和客
时间: 2024-02-24 13:58:31 浏览: 94
户端程序,服务端程序应能同时处理多个客户端请求; (2)客户端程序应能发起连接请求并向服务器发送数据; (3)服务端程序应能接收来自客户端的数据并对其进行处理; (4)客户端程序应能接收来自服务器的数据并对其进行处理; (5)客户端应能主动断开连接; (6)服务端应能检测到客户端的连接断开并作出相应处理。
以下是一个基于流套接字的客户机/服务器通信程序的简单示例,其中服务端程序与客户端程序分别在不同的文件中实现:
**服务端程序(server.py):**
```
import socket
# 创建套接字并绑定端口
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('localhost', 8888))
server_socket.listen(5)
print('Server is listening on port 8888...')
while True:
# 等待客户端连接
client_socket, client_address = server_socket.accept()
print(f'New connection from {client_address}')
# 接收客户端发送的数据并处理
while True:
data = client_socket.recv(1024)
if not data:
break
print(f'Received data from client: {data.decode()}')
response = f'Response from server to {client_address}'
client_socket.sendall(response.encode())
# 关闭客户端连接
client_socket.close()
print(f'Connection with {client_address} closed.')
```
**客户端程序(client.py):**
```
import socket
# 创建套接字并连接服务器
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('localhost', 8888))
# 发送数据给服务器
message = 'Hello, server!'
client_socket.sendall(message.encode())
# 接收服务器发送的数据并处理
response = client_socket.recv(1024)
print(f'Received response from server: {response.decode()}')
# 断开连接
client_socket.close()
```
这是一个简单的示例,可以按照需求进行修改和扩展。注意,这里使用了阻塞式IO,也可以使用非阻塞式IO或异步IO来提高程序的性能和并发处理能力。
阅读全文