Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
线程未启动-没有提示用户输入(Python)_Python_Multithreading_Sockets_Input - Fatal编程技术网

线程未启动-没有提示用户输入(Python)

线程未启动-没有提示用户输入(Python),python,multithreading,sockets,input,Python,Multithreading,Sockets,Input,我正在使用Python实现一个简单的消息传递应用程序。我定义了一个客户机CClient,它实例化了一个cmsgateway,然后开始一个线程,请求用户输入(而1)。客户情况如下: from msginterface import CMsgGateway class CClient(): def __init__(self): self.port = 2400 self.msgGate = CMsgGateway(self.port) T

我正在使用Python实现一个简单的消息传递应用程序。我定义了一个客户机
CClient
,它实例化了一个
cmsgateway
,然后开始一个线程,请求用户输入(而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
方法没有开始(我看不到输入提示,例如没有显示“输入消息”)


有人能帮我找出这有什么问题吗?非常感谢。

在主线程上,您应该等待CClient线程完成,而不是退出,或者您应该在主线程上执行一些东西,而不是创建另一个线程。这似乎可以解决问题……是因为在
inputMsg
线程启动后,主线程中没有执行任何其他内容吗?