Один сервер и 3 клиента с использованием UDP одновременно с использованием Python - PullRequest
0 голосов
/ 10 ноября 2019

Доброе утро. Недавно я начал изучать программирование сети и Python с использованием Raspberry Pi (эмуляторная программа для Linux), и у меня возникла небольшая проблема. Моя домашняя работа - сделать сервер и трех клиентов, где эти клиенты должны получать информацию о температуре от Raspberry через сервер (температура сервера отправляет) одновременно (важно!), Но, как я вижу, эти клиенты получают информацию, но похоже, что 1 клиент получает иотдохнуть, пока он не получит температуру .... и я действительно не знаю, какие изменения я должен внести в мой код: (

serwer.py

from sense_emu import SenseHat
from time import sleep
import socket

sense = SenseHat()

UDP_IP = "127.0.0.1"
UDP_PORT = 5005

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

 while 1:
       temp = sense.temp
       tempe = str(temp)
       message = tempe.encode('utf-8')
       sock.sendto(message, (UDP_IP, UDP_PORT))
       sleep(1)

client.py

from time import sleep
import socket

UDP_IP = "127.0.0.1"
UDP_PORT = 5005
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind((UDP_IP, UDP_PORT))

 while 1:
       message, addr = sock.recvfrom(1024)
       mes = str(message)
       print("received message:"+mes)
       sock.close()
       sleep(2)
       sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
       sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
       sock.bind((UDP_IP, UDP_PORT))

Я действительно думал, что он должен работать через bind socket на каждом клиенте, но, к сожалению, нет.

1 Ответ

0 голосов
/ 12 ноября 2019

вы, кажется, неправильно понимаете, как работают сокеты, я бы посоветовал еще немного прочесть о них

некоторые указатели и общие соглашения:

  1. обычно процесс "сервер"bind с определенным «известным» портом и клиентами connect по этому адресу / порту
  2. UDP ненадежен (важно, что в этом случае пакеты могут быть потеряны), поэтому вам может понадобиться способ ретрансляциизначения
  3. хосты ненадежны (например, они могут быть отключены или менять IP-адрес), вам может потребоваться какой-то способ убедиться, что сервер не отправляет слишком много данных хостам, которые могут не существовать
...