python课程设计编写程序,实现远程通信,客户端启动多个线程向服务器端连续请求数据服务,服务器可提供分类的数据服务等(方法:socketserver库创建服务器端,利用socket创建客户端
时间: 2023-12-02 20:03:55 浏览: 47
好的,我可以给您提供一个简单的 Python 程序示例,实现客户端启动多个线程向服务器端连续请求数据服务,服务器可提供分类的数据服务等。以下是代码示例:
服务器端代码:
```python
import socketserver
class MyTCPHandler(socketserver.BaseRequestHandler):
def handle(self):
while True:
data = self.request.recv(1024)
if not data:
break
# 根据客户端请求的服务类型,返回对应的数据
if data == b'type1':
self.request.sendall(b'service1 data')
elif data == b'type2':
self.request.sendall(b'service2 data')
else:
self.request.sendall(b'unknown service')
if __name__ == "__main__":
HOST, PORT = "localhost", 9999
server = socketserver.TCPServer((HOST, PORT), MyTCPHandler)
server.serve_forever()
```
客户端代码:
```python
import threading
import socket
class ClientThread(threading.Thread):
def __init__(self, threadID, name, server_address, service_type):
threading.Thread.__init__(self)
self.threadID = threadID
self.name = name
self.server_address = server_address
self.service_type = service_type
def run(self):
print("Starting " + self.name)
# 创建一个 TCP/IP 套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接服务器端
sock.connect(self.server_address)
try:
# 发送服务类型请求
sock.sendall(self.service_type.encode())
# 接收数据
data = sock.recv(1024)
print("{}: {}".format(self.name, data))
finally:
# 关闭套接字
sock.close()
if __name__ == "__main__":
# 服务器端地址
server_address = ("localhost", 9999)
# 创建多个客户端线程
threads = []
for i in range(5):
thread = ClientThread(i, "Thread-{}".format(i), server_address, "type1")
threads.append(thread)
for i in range(5, 10):
thread = ClientThread(i, "Thread-{}".format(i), server_address, "type2")
threads.append(thread)
# 启动所有线程
for thread in threads:
thread.start()
# 等待所有线程完成
for thread in threads:
thread.join()
```
以上代码示例中,服务器端使用 socketserver 库创建 TCP 服务器,客户端使用 socket 库创建 TCP 客户端,每个客户端在一个独立的线程中运行。客户端线程向服务器发送服务类型请求,服务器根据请求类型返回对应的数据。如果请求类型未知,则返回“unknown service”提示信息。客户端接收到数据后打印输出,然后关闭套接字。