我如何编写一个发布者和订阅者,将多行发送给 Python 中的订阅者?

How do I code a publisher and subscriber that would send multiple lines over to the subscriber in Python?

示例输出最终看起来像:

客户端:

输入新命令:B50

输入新指令H70

输入新命令:Z80

订阅方: 收到:B50

收到:H70

收到:Z80

当前发布商代码

#!/usr/bin/env python

import socket


TCP_IP = '127.0.0.1'
TCP_PORT = 5005
BUFFER_SIZE = 1024

def sendMsg(str):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((TCP_IP, TCP_PORT))
    s.send(str.encode())
    data = s.recv(BUFFER_SIZE)
    s.close()
    return

while 1:
    MESSAGE = input("Enter Command: ")
    sendMsg(MESSAGE)



print ("received data:", data.decode())

当前订阅者代码

#!/usr/bin/env python

import socket


TCP_IP = ''
TCP_PORT = 5005
BUFFER_SIZE = 20  # Normally 1024, but we want fast response

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP, TCP_PORT))
s.listen(1)

conn, addr = s.accept()
print ('Connection address:', addr)
while 1:
    data = conn.recv(BUFFER_SIZE)
    if not data: break
    print ("received data:", data.decode())
    conn.send(data)  # echo
conn.close()

想通了,不得不为此编辑我的订阅者代码

#!/usr/bin/env python

import socket


TCP_IP = ''
TCP_PORT = 5005
BUFFER_SIZE = 20  # Normally 1024, but we want fast response

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP, TCP_PORT))
s.listen(1)

conn, addr = s.accept()
print ('Connection address:', addr)
while 1:
    data = conn.recv(BUFFER_SIZE)
    if data: 
        print ("received data:", data.decode())
    conn.send(data)  # echo
    s.listen(1)
    conn, addr = s.accept()
conn.close()