windows监听socket和标准输入

原来的代码

    def input_command(self):
        msg = raw_input('
Please input the command:')
        remote_id = raw_input("Please input remote id:")
        msg_send = "%s||%s" % (remote_id, msg)
        self.client_socket.send(msg_send)
        self.flag = 1
        #todo 这里输入完毕后socket会关闭,找到原因后写到博客园上

    def socket_handler(self):
        while 1:
            if self.flag == 0:#如果没有输入就等待输入,否则等待网络返回
                self.input_command()
            rlist = [self.client_socket]  # 接收列表
            read_list, write_list, error_list = select.select(rlist, [], [], 2)
            for sock in read_list:
                # incoming message from remote server
                if sock == self.client_socket:
                    data = sock.recv(4096)
                    if not data:
                        print '
Disconnected from chat server'
                        sys.exit()
                    else:
                        # print data
                        self.process_data_return(data)
                        self.prompt()

其实我也不太懂为什么,把输入放到select后边就可以了

    def input_command(self):
        msg = raw_input('
Please input the command:')
        remote_id = raw_input("Please input remote id:")
        msg_send = "%s||%s" % (remote_id, msg)
        self.client_socket.send(msg_send)
        self.flag = 1

    def socket_handler(self):
        f = open('input.txt','w+')
        while 1:
            start = datetime.datetime.now()  # 开始时间
            rlist = [self.client_socket]  # 接收列表
            read_list, write_list, error_list = select.select(rlist, [], [], 2)
            if self.flag == 0:  # 如果没有输入就等待输入,否则等待网络返回
                self.input_command()
            for sock in read_list:
                time.sleep(0.2)
                now = datetime.datetime.now()
                if (now - start).seconds > TIMEOUT:
                    break#watchddog
                # incoming message from remote server
                if sock == self.client_socket:
                    data = sock.recv(4096)
                    if not data:
                        print '
Disconnected from chat server'
                        sys.exit()
                    else:
                        # print data
                        self.process_data_return(data)
                        self.prompt()
原文地址:https://www.cnblogs.com/wuxie1989/p/7233116.html