是否可以通过套接字发送两条消息

时间:2019-01-05 15:05:49

标签: python

我正在尝试从服务器向客户端发送消息

我尝试删除.close并在打印中放置一个while循环,但是它仍然无法正常工作

客户

import socket 

s = socket.socket()            
host = socket.gethostname()
port = 12345  

s.connect((host, port))
while True:
    print (s.recv(1024))

服务器

import socket               

s = socket.socket()  
host = socket.gethostname()
port = 12345     

s.bind((host, port))
s.listen(5)
while True:
    c, addr = s.accept()
    print ('Got connection from', addr)
    x = str(input("ënter a message"))

    data = x.encode()
    c.send(data)

我希望输出是来自服务器的2条消息,但它只发送1条消息,然后关闭连接

1 个答案:

答案 0 :(得分:1)

切换您的acceptwhile True:行。接受连接后,请继续发送相同的连接。

请注意,TCP是流协议。没有“消息”的概念,只有一堆字节。如果发送速度足够快,例如:

c.send(b'abc')
c.send(b'def')

然后recv(1024)可以收到b'abcdef'。对于更复杂的通信,您必须定义协议和缓冲区recv,直到确定收到完整的消息为止。在这种情况下,一种简单的方法是读取,直到找到换行符,或者在发送实际消息之前发送指示总消息大小的字节(或更多)。