首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Client-Server python :无法单独打印接收到的消息

Client-Server python :无法单独打印接收到的消息
EN

Stack Overflow用户
提问于 2020-03-24 06:07:08
回答 1查看 68关注 0票数 2

我对所有的网络编程都很陌生。我有一些硬件,通常通过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:

代码语言:javascript
复制
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

代码语言:javascript
复制
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()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-24 08:19:43

即时连续打印看起来很混乱,但您的代码运行良好。

您只需要通过确定接收的数据类型来分离数据处理逻辑。不管您在while循环中放入了什么逻辑,它都会对套接字中的每个消息运行。

代码语言:javascript
复制
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中尝试一下,这将是有意义的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60825734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档