基于网络的消息传递程序的同时输入和输出

时间:2015-09-29 22:59:21

标签: multithreading sockets python-3.x

在python中,我正在创建一个消息系统,客户端和服务器可以在其中来回发送消息。这是我的客户代码:

import threading
import socket

# Global variables
host = input("Server: ")
port = 9000
buff = 1024

# Create socket instance
s = socket.socket()

# Connect to server
s.connect( (host, port) )
print("Connected to server\n")


class Recieve(threading.Thread):
    def run(self):
        while True: # Recieve loop
            r_msg = s.recv(buff).decode()
            print("\nServer: " + r_msg)

recieve_thread = Recieve()
recieve_thread.start()

while True: # Send loop
    s_msg = input("Send message: ")

    if s_msg.lower() == 'q': # Quit option
        break

    s.send( s_msg.encode() )

s.close()

我在后台有一个线程来检查服务器消息和循环输入以向服务器发送消息。当服务器发送消息并且用户输入立即被弹起以为服务器消息腾出空间时,就会出现问题。我想要它,以便输入保持固定在shell窗口的底部,而输出从第二行打印,留下第一行。我被告知你可以使用curses或Queues来做这件事,但我不确定哪一个在我的情况下最好,也不知道如何在我的项目中实现这些模块。

任何帮助将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:1)

  

我想要它以便输入保持固定到shell的底部   窗口,而输出从第二行打印出来,留下了   仅排在第一线。我被告知你可以使用诅咒

以下是使用curses的客户端代码的补充版本。

<ol class="bucketcol ui-sortable" id="sortable">
<li class="bucketrow">Object 1</li><li class="bucketrow">Object 2</li><li class="bucketrow">Object 3</li><li class="bucketrow">Object 4</li><li class="bucketrow">Object 5</li><li class="bucketrow">Object 6</li><li class="bucketrow">Object 7</li><li class="bucketrow">Object 8</li><li class="bucketrow">Object 9</li><li class="bucketrow">Object 10</li><li class="bucketrow">Object 11</li><li class="bucketrow">Object 12</li><li class="bucketrow">Object 13</li><li class="bucketrow">Object 14</li><li class="bucketrow">Object 15</li><li class="bucketrow">Object 16</li><li class="bucketrow">Object 17</li><li class="bucketrow">Object 18</li><li class="bucketrow">Object 19</li><li class="bucketrow">Object 20</li></ol>

更改滚动区域以省略屏幕的底线,暂时进入滚动区域以输出服务器消息,并在结束时将其更改回来。