我正在使用CMD2创建一个服务器。我已经将我的代码分解为仍然会产生问题的最小代码。
import socket
import _thread
from cmd2 import *
def grab_data(conn):
while True:
try:
data = conn.recv(1024)
print(data)
except:
print("disconnected.")
break
def grab_client(sock):
while True:
conn, addr = sock.accept()
print("New connection")
_thread.start_new_thread(grab_data, (conn,))
def start_conn(ip, port):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind((ip, int(port)))
sock.listen(10)
print("Socket listening")
_thread.start_new_thread(grab_client, (sock,))
class CLI(Cmd):
def __init__(self):
Cmd.__init__(self)
self.prompt = "Prompt> "
def do_listen(self, arg):
start_conn('0.0.0.0', '4446')
def emptyline(self):
pass
def do_quit(self, arg):
return True
cli = CLI()
cli.cmdloop("Welcome to the server.")我遇到的问题是当客户端连接时。它不会重新打印提示。它挂在只有光标的空行上。我不确定如何让提示符打印回来。
发布于 2018-12-14 04:06:45
您正在阻塞尝试读取1024个字节,所以它必须等待,直到整个缓冲区被填满。要做适当的基于行的缓冲有点棘手,但一个简单的(尽管性能不佳)实现是一次读取一个字符并检查它是否是换行符:
line = ""
while True:
data = conn.recv(1)
line += data
if data in "\n\r":
break(这不是很好的代码,但让我们看看这是否解决了问题,我们可以改进它。)
https://stackoverflow.com/questions/53765441
复制相似问题