Python 3套接字 - 接收超过1个字符

时间:2016-09-22 22:01:33

标签: python sockets python-3.x

因此,当我打开CMD并使用以下命令创建telnet连接时

telnet localhost 5555

正如您在下面的屏幕上看到的那样,它将会出现#34;欢迎" 之后,我输入CMD的每个字符都会立即打印出来/发送。 我的问题是:是,如果是,如何输入消息然后发送它们,所以我收到它们作为1个句子而不是字符char。 enter image description here

import socket
import sys
from _thread import *

host = ""
port = 5555
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

try:
    s.bind((host,port))
except socket.error as e:
    print(str(e))

s.listen(5) #Enable a server to accept connections.
print("Waiting for a connection...")

def threaded_client(conn):
    conn.send(str.encode("Welcome\n"))

    while True:
    # for m in range (0,20): #Disconnects after x chars
        data = conn.recv(2048) #Receive data from the socket.
        reply = "Server output: "+ data.decode("utf-8")
        print(data)
        if not data:
            break
        conn.sendall(str.encode(reply))
    conn.close()

while True:
    conn, addr = s.accept()
    print("connected to: "+addr[0]+":"+str(addr[1]))
    start_new_thread(threaded_client,(conn,))

3 个答案:

答案 0 :(得分:1)

你需要继续阅读直到流结束:

{{1}}

顺便说一句,使用该方法,您一次只能阅读一个字符。您可以根据服务器发送数据的方式进行调整。

答案 1 :(得分:0)

您可以尝试类似:(伪代码)

temp = conn.recv(2048)
data.concatenate(temp) # maybe data = data + temp ???? little rusty
if data[-1] == '\n':
    print 'message: ' + data
etc...

答案 2 :(得分:0)

这取决于您是否要在字符模式或行模式下运行。 目前您的代码很好,但您的Windows telnet客户端以字符模式运行。您可以使用putty在线模式下尝试,或者如果您确实需要以char模式运行,则继续读取缓冲区,直到发送换行符。

以下是我运行代码时服务器所说的内容:

Waiting for a connection...
connected to: 127.0.0.1:46738
b'Hello\r\n'

远程登录会议:

telnet 127.0.0.1 5555
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
Welcome
Hello
Server output: Hello