使用Python同时使用UDP的一台服务器和3个客户端

问题描述 投票:0回答:1

早上好。我最近开始使用Raspberry Pi(Linux上的仿真器程序)学习网络和Python编程,但我遇到了一些问题。我的作业是制造服务器和三个客户端,其中该客户端应同时从树莓派通过服务器获取温度信息(服务器发送温度)(重要!),但是正如我所看到的,此客户端获取信息,但看起来就像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))

我真的认为它应该在每个客户端上通过绑定套接字工作,但不幸的是,不是。

python python-3.x raspberry-pi udp
1个回答
0
投票

您似乎误解了套接字的工作方式,建议您多读一些有关它们的内容

一些指针和一般约定:

  1. 通常,“服务器”将bind处理到特定的“知名”端口,而客户机connect则处理该地址/端口
  2. UDP不可靠(在这种情况下,重要的是数据包可能会丢失),因此您可能需要一种重新传输值的方法
  3. 主机不可靠(例如,它们可能已关闭,或更改了IP地址),您可能需要某种方法来确保服务器不会向可能不存在的主机发送过多的数据
© www.soinside.com 2019 - 2024. All rights reserved.