所以我正在学习套接字编程并编写了一个漂亮的小聊天服务器。我遇到的问题是我的客户端无法同时读写。我不太确定如何设置。
这就是我到目前为止所拥有的,我希望 read() 和 write() 能够同时运行(这并不是同时读取和写入 - 而是能够在输入时接收消息( )挂起等待用户输入。):
import socket
import threading
class Client(threading.Thread):
def __init__(self):
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.socket.connect(('127.0.0.1', 1234))
print('Client connected to server')
self.readThread = threading.Thread.__init__(self)
self.writeThread = threading.Thread.__init__(self)
def read(self):
data = self.socket.recv(1024)
if data:
print('Received:', data)
def write(self):
message = input()
self.socket.send(bytes(message, 'utf-8'))
client = Client()
while True:
#do both
最佳答案
你们真的很接近。尝试这样的事情:
import socket
import threading
class Client(threading.Thread):
def __init__(self):
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.socket.connect(('127.0.0.1', 1234))
print('Client connected to server')
t = threading.Thread(target = self.read)
t.daemon = True # helpful if you want it to die automatically
t.start()
t2 = threading.thread(target = self.write)
t2.daemon = True
t2.start()
def read(self):
while True:
data = self.socket.recv(1024)
if data:
print('Received:', data)
def write(self):
while True:
message = input()
self.socket.send(bytes(message, 'utf-8'))
client = Client()
值得指出的是,如果您通过这种方式从单个终端读取和写入,您的提示可能会有点失控。我想虽然您是从打印语句开始,但最终会将数据收集到应用程序中的其他容器中。
关于Python多线程,同时运行两个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11697855/