Client-Server python : 收到的消息无法单独打印
Client-Server python : The received message can't be printed individually
我对所有网络编程都很陌生。我有一些硬件,我通常通过 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()
即时连续打印输出看起来很混乱,但您的代码工作正常。
您只需要通过确定您接收的数据类型来分离您的数据处理逻辑。对于来自套接字的每条消息,您在 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 试试这个,它会有意义。
我对所有网络编程都很陌生。我有一些硬件,我通常通过 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()
即时连续打印输出看起来很混乱,但您的代码工作正常。
您只需要通过确定您接收的数据类型来分离您的数据处理逻辑。对于来自套接字的每条消息,您在 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 试试这个,它会有意义。