Python 面向初学者的socket编程-服务器创建
我开始学习socket编程,并创建了一个简单的服务器,可以将我发送给他的所有内容都回放给我。Python 面向初学者的socket编程-服务器创建,python,sockets,networking,Python,Sockets,Networking,我开始学习socket编程,并创建了一个简单的服务器,可以将我发送给他的所有内容都回放给我。 它的工作和我设法telnet到它和写东西。 但我的代码有两个问题: 首先,我在键盘上发出的每一声叹息都会立即被发送,我也会得到回复。它不会等到我按下回车键 第二,当我打印到客户端时,欢迎使用服务器。键入某物并点击输入\n\n’/COD>客户端在新行的中间看到CMD输入光标,而不是在它的开头。 以下是我的部分代码: #server in local host class ClientConnection(
它的工作和我设法telnet到它和写东西。 但我的代码有两个问题:
#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
如何仅在客户端按enter键时才做出服务器响应?我试图检查recive='\n'
是否有效,但它似乎不起作用。
我将感谢任何帮助和提示
编辑:我的第二个问题的答案很简单是的,客户端通常会在用户键入时向您发送数据,而不是仅在用户点击返回时发送。因此,由您检查数据是否有返回,并仅在返回时进行响应
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()
每一行都应该以
\r\n
结尾。谢谢,您简单地解决了我的第二个问题。我认为服务器应该在阅读了客户端的请求后发送一些内容。请尝试注释行conn.send('欢迎使用服务器。键入一些内容,然后按enter\n\n'.encode())
,看看它是否有效。免责声明:此代码未经测试,并且在深夜被破解,因此请将其视为伪代码,而不是代码,并确保您仔细测试和理解它。谢谢您的帮助。我有了这个想法,做了类似的事情,但不是两次:-)