我开始学习套接字编程,我创建了一个简单的服务器,它应该重播我寄给他的所有内容 它的工作和我设法telnet到它并写东西。 但我的代码有两个问题:
首先,我在键盘上击中的每一声叹息都会立即发送,然后我就会回来。它不会等到我按回车键。
其次,当我打印到客户端'Welcome to the server. Type something and hit enter\n\n'
时,客户端会在新行的中间看到cmd imput光标,而不是在它的开头。
这是我的代码的一部分:
#server in local host
class ClientConnection(threading.Thread):
def __init__(self,conn):
threading.Thread.__init__(self)
self.conn = conn
def run(self):
clientthread(self.conn)
#create a new thread for each connection
def clientthread(conn):
conn.send('Welcome to the server. Type something and hit enter\n\n'.encode())
while True:
data = conn.recv(2048).decode()
replay = 'OK....' + data
if not data:
break
conn.sendall(replay.encode())
conn.close()
... #socket get close in the end
如果客户端按下回车键,我该如何进行服务器响应?我试着检查一下recive = '\n'
但它似乎不起作用。
我将不胜感激任何帮助和提示
编辑:我的第二个问题只是
答案 0 :(得分:1)
是的,客户端通常会在用户输入时向您发送数据,而不是仅在用户返回时发送。因此,您需要检查数据是否有返回,并且只有在返回时才会响应。
data = ""
while True:
chunk = conn.recv(2048).decode()
if not data:
break
# try to separate the chunk by newline, to see if you got one.
while True:
split = chunk.split("\r\n", num=1)
data += split[0]
if len(split) == 1:
break
# Now we have a completed newline, so send the response
replay = 'OK....' + data
conn.sendall(replay.encode())
data = ""
conn.close()