我正在使用Python实现一个简单的消息传递应用程序。我已经定义了一个客户机CClient
,它实例化一个CMsgGateway
,然后开始一个线程,请求用户输入(而不是1)。客户情况如下:
from msginterface import CMsgGateway
class CClient():
def __init__(self):
self.port = 2400
self.msgGate = CMsgGateway(self.port)
Thread(target=self.inputMsg).start()
def inputMsg(self):
while 1:
msg = input("Enter message:")
self.msgGate.sendMsg(msg)
if __name__ == '__main__':
cmdchat = CClient()
消息网关侦听在单独线程中接收的消息(1)。此类定义为:
from threading import Thread
import socket, struct, sys
class CMsgGateway():
def __init__(self, port):
self.port = port
print("Listening on port " + str(self.port) + ".\n")
Thread(target=self.serve).start()
def serve(self):
while 1:
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.sock.bind(("", self.port))
self.sock.listen(1)
self.rcvMsg()
def rcvMsg(self):
serverSocket, info = self.sock.accept()
while 1:
try:
buf = bytearray(4000)
view = memoryview(buf)
bytes = serverSocket.recv_into(view, 4000)
if bytes:
stx = view[0]
Size = view[1:3]
bSize = Size.tobytes()
nTuple = struct.unpack(">H", bSize)
nSize = nTuple[0]
message = view[0:3+nSize]
messageString = message.tobytes().decode("utf-8").strip()
print("Received message:\n\n" + messageString)
sys.stdout.flush()
else:
break
except socket.timeout:
break
def sendMsg(self, msgToSend):
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
host = socket.gethostname()
self.sock.connect((host, self.port))
self.sock.send(msgToSend.encode())
self.sock.close()
当我运行程序时,CMsgGateway
内的线程开始侦听消息。但是,据我所知,CClient
内的线程,inputMsg
方法没有开始(我看不到输入提示,例如,“enter message”没有显示)
有人能帮我找出这有什么问题吗?非常感谢
目前没有回答
相关问题 更多 >
编程相关推荐