【问题标题】:Client-Server python : The received message can't be printed individuallyClient-Server python:接收到的消息不能单独打印
【发布时间】:2020-07-04 15:14:11
【问题描述】:

我对所有网络编程都很陌生。我有一些硬件,我通常通过 UDP 流获得 2 条捆绑消息(因此我编写了一个假服务器来模拟硬件)

我创建了一个简单的客户端-服务器,服务器发送 2 条消息,客户端接收它们。我的问题是,当我打印出从服务器收到的数据时,它会打印为 2 条消息,但无法只获取其中一条消息。我尝试了我能想到的一切。我觉得答案很简单。

例如:

print(self.data) 输出:

b'#message1,765,0,77.5,allgood,2096,183412.000' b'#message2,654,0,76.5,allgood,2096,183411.000'

print(self.data.decode().split(',')[0]) 输出:

#message1

#message2

我想要的输出是什么:

#message1

那么我如何只选择#message1?任何帮助将非常感激。我在下面粘贴我的代码:

fakeServer.py:

import socket
import time
UDP_IP = "127.0.0.1"
UDP_PORT = 5005
MESSAGE1 = "#message1,765,0,77.5,allgood,2096,183412.000"
MESSAGE2 = "#message2,654,0,76.5,allgood,2096,183411.000"

print ("UDP target IP:", UDP_IP)
print ("UDP target port:", UDP_PORT)
print ("message1:", MESSAGE1)
print ("message2:", MESSAGE2)

while True:
    sock = socket.socket(socket.AF_INET, # Internet
                    socket.SOCK_DGRAM) # UDP
    sock.sendto(MESSAGE1.encode('utf-8'), (UDP_IP, UDP_PORT))
    sock.sendto(MESSAGE2.encode('utf-8'), (UDP_IP, UDP_PORT))
    time.sleep(3)

fakeClient.py

import socket
from tspiMessages import *
import io


class Client():
    def __init__(self):
        self.client()
    def client(self):
        server_address = ('', 5005)

        sock = socket.socket(socket.AF_INET, # Internet
                        socket.SOCK_DGRAM) # UDP
        sock.bind(server_address)
        try:
            while True:
                self.data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes
                self.data1 = self.data.decode().split(',')#[0]
                print(self.data)

        finally:
            sock.close()


if __name__ == '__main__':
    client = Client()

【问题讨论】:

    标签: python udp client-server multicast


    【解决方案1】:

    即时连续打印输出看起来令人困惑,但您的代码运行良好。

    您只需要通过确定您收到的数据类型来分离您的数据处理逻辑。无论您在 while 循环中放置什么逻辑,都将为来自套接字的每条消息运行。

    self.data, addr = sock.recvfrom(1024)
    print("==== NEW DATA RECEIVED ====")
    if "message1" in self.data:
      print("DATA TYPE IS message1")
      print("======== START message1 DATA ====")
      print(self.data)
      print("======== END message1 DATA ====")
    elif "message2" in self.data:
      print("DATA TYPE IS message2")
      print("======== START message2 DATA ====")
      print(self.data)
      print("======== END message2 DATA ====")
    else:
      print("DATA TYPE IS UNKNOWN")
      print("======== START UNKNOWN DATA ====")
      print(self.data)
      print("======== END UNKNOWN DATA ====")
    print("==== DATA PROCESSING ENDS ====")
    

    在 fakeClient.py 中试试这个,它会有意义。

    【讨论】:

    • 此解决方案有效。现在我得到了我需要的数据。谢谢!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-03
    • 2017-10-17
    • 1970-01-01
    • 1970-01-01
    • 2014-05-03
    • 2016-12-04
    • 1970-01-01
    相关资源
    最近更新 更多