Я хотел бы сделать UDP-сервер, который отправляет сообщение клиенту UDP вскоре после того, как сервер получит сообщение от клиента. Я использую Python и Google Protobuffer как протокол сообщений.Как отправить UDP-сообщение с UDP-сервера без отправки самому себе?
В настоящее время часть приема сообщений кажется работающей, но в отношении части отправки сообщения возникает проблема: ответное сообщение с сервера не поступает клиенту, а еще хуже, сервер показывает это сообщение (возможно, он отправляет для себя? Сейчас консоль показывает как сообщение от клиента, так и сообщение, которое должно быть отправлено клиенту). Эта проблема не возникла, когда я попробовал аналогичный код на C++ или C#.
Ниже приведены некоторые выдержки из моего кода:
def connect(self):
remote = ('x.x.x.x',xxxx) #ip and port
self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
self.sock.settimeout(2.5)
self.sock.bind(remote)
self.sock.settimeout(None)
def start(self):
while not self.exit_thread:
# Get the message from client
data, address = self.sock.recvfrom(8192)
if data is not None:
# De-serialize inbound message from client
msg_client = xxx_pb2.msgClient()
msg_client.ParseFromString(data)
# Display message from client
self.display_inbound_message(msg_client)
# Create a new message from server
msg_serer = xxx_pb2.msgServer()
self.create_outbound_message(msg_serer)
# Send the Udp message to the client, return the number of bytes sent
bytes_sent = self.sock.sendto(msg_server.SerializeToString(), self.remote)
if (bytes_sent < 0):
print("Error send message")
У меня нет достаточного опыта для программирования UDP на Python. Пожалуйста, дайте мне знать, если вы заметили что-нибудь.
Как вы называете это? в «потоке» или нет? – Arman
Я пока не использую 'thread', но планирую использовать его после выяснения этой проблемы. Связано ли это с этой проблемой? – kangaroo