. 简答题 编程实现客户端键盘录入数据,在输入字符串“exit”以前,可重复录入数据,服务器端接收数据,并将接收到的数据输出到控制台 要求:客户端和服务器端代码用线程进行封装。
时间: 2024-10-15 14:13:44 浏览: 18
为了实现客户端和服务器端的线程封装,我们可以分别编写客户端和服务器端的代码。这里我们使用Python作为示例语言,因为它支持多线程操作。
**客户端代码(Client.py)**:
```python
import socket
import threading
class ClientThread(threading.Thread):
def __init__(self, host, port):
super().__init__()
self.host = host
self.port = port
self.socket = None
self.running = True
def run(self):
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.socket.connect((self.host, self.port))
while self.running:
data = input("请输入数据(输入'exit'退出): ")
if data == 'exit':
break
self.socket.send(data.encode())
response = self.socket.recv(1024).decode()
print(f"服务器回复: {response}")
def stop(self):
self.running = False
self.socket.close()
if __name__ == "__main__":
client_host = 'localhost'
client_port = 9999
client_thread = ClientThread(client_host, client_port)
client_thread.start()
# 按需添加停止服务的机制,例如按Ctrl+C
```
**服务器端代码(Server.py)**:
```python
import socket
import threading
class ServerThread(threading.Thread):
def __init__(self, host, port):
super().__init__()
self.host = host
self.port = port
self.server_socket = None
def run(self):
self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.server_socket.bind((self.host, self.port))
self.server_socket.listen(1)
while True:
client, addr = self.server_socket.accept()
data = client.recv(1024).decode()
print(f"接收到的数据: {data}")
client.sendall(data.upper().encode())
client.close()
if __name__ == "__main__":
server_host = 'localhost'
server_port = 9999
server_thread = ServerThread(server_host, server_port)
server_thread.start()
server_thread.join() # 保证服务器线程结束前,主线程不会退出
```
这两个程序通过网络连接,客户端发送数据,服务器接收并返回处理后的结果。当客户端输入 "exit" 时,会关闭连接,终止循环。
阅读全文