python中的recv()方法,接受句子而不是字符

时间:2016-02-29 18:10:02

标签: python sockets

这是我的代码,它收集来自客户端的消息:

def RecieveFromClient(clientSocket, address):
    print "Connection from " + str(clientSocket) 
    msg = None
    while True:
        msg = clientSocket.recv(1024)
        print msg
        if msg == 'c':
            break

    clientSocket.close()
    print "client gone"

现在当我telnet到正在收听客户端的服务器并按下一个字符时,它会立即打印出服务器端的字符。我想要的是从用户那里收到一行或完整的句子。有可能吗?

1 个答案:

答案 0 :(得分:0)

只要获得新数据,

recv()就会返回。 recv(size)只有在有大小数据的情况下才会返回。

您必须使邮件的长度成为协议的明确部分。这是最好的方法:为每条消息添加一个长度,作为固定大小的整数(使用socket.ntohs()或socket.ntohl()转换为网络字节顺序!)或作为字符串后跟一些分隔符(如' 123:')。

来源:https://stackoverflow.com/a/1716173/1802922