PyQt5实现UDP通讯

1.UDP协议简介

UDP,用户数据报传输协议,它位于TCP/IP协议的传输层,是一种无连接的协议,它发送的报文不能确定是否完整地到达了另外一端。

2.python创建UDP服务器

server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)  # udp协议
ip_port = ('ip地址',端口号)
server.bind(ip_port)
#服务器接收数据
data, client_addr = server.recvfrom(BUFSIZE)
#注意:data数据类型为byte数组
if len(data) > 0:
	#服务器发送数据
	server.sendto(data.upper(), client_addr)

3.python创建UDP客户端

client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)  # udp协议
ip_port = ('ip地址',端口号)
#客户端发送数据
client.sendto(msg, ip_port)
#客户端接收数据
data, server_addr = client.recvfrom(BUFSIZE)
#注意:data数据类型为byte数组

4.结果运行实例

客户端界面
在这里插入图片描述
服务器界面
在这里插入图片描述

5.总结

(1)基于UDP通讯的服务器与客户端,可创建子线程去响应接收消息与发送消息。
(2)子线程要更新主线程中控件变量的值时,可采用消息传递机制。子线程中修改主线程的变量,主线程读取变量并绘制。

# 关键:继承QThread
class Server_RunThread(QThread):
    signal = pyqtSignal(str)
    def __init__(self,parent = None):
        super().__init__(parent)
    def run(self):
        while True:
            data, client_addr = server.recvfrom(BUFSIZE)
            if len(data) > 0:
                server.sendto(data.upper(), client_addr)
                self.signal.emit(str(data))
# 创建线程
serverThread = Server_RunThread()
serverThread.signal.connect('线程执行的方法')
  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
PyQt是一个结合了Python语言和Qt库的工具包,它提供了丰富的用户界面和网络编程功能。在PyQt中,UDP(User Datagram Protocol)广播是一种用于在局域网中向所有连接在同一网络的设备发送数据的方法。UDP是无连接的,不保证数据包的顺序和完整性,但适合实时通信,如广播寻址。 在PyQt中使用UDP广播,你需要做以下几个步骤: 1. **创建QUDPSocket对象**:首先,你需要从`QUdpSocket`类创建一个对象,这是处理UDP网络操作的基础。 ```python from PyQt5.QtNetwork import QUdpSocket udp_socket = QUdpSocket() ``` 2. **绑定端口**:设置服务器监听的本地端口号,使用`bind()`方法。 ```python udp_socket.bind(UDP_BROADCAST_PORT) ``` 注意要用`UDP_BROADCAST_PORT`替换,这个端口号通常是239.255.255.255。 3. **开启广播模式**:调用`setBroadcast(True)`允许发送广播消息。 ```python udp_socket.setBroadcast(True) ``` 4. **发送广播数据**:准备要发送的数据,然后使用`sendto()`方法发送到广播地址。 ```python data = "Your data here" udp_socket.sendto(data.encode(), ("255.255.255.255", UDP_BROADCAST_PORT)) ``` 5. **接收广播数据**:如果你想在同一个端口上接收广播消息,可以设置一个接收信号处理器。 ```python udp_socket.readyRead.connect(self.on_new_data) def on_new_data(self): data, sender = udp_socket.readDatagram() # 解码并处理接收到的数据 print("Received:", data.decode()) ``` 6. **处理异常**:确保处理可能出现的错误,例如套接字关闭或网络中断。 ```python try: # ... except Exception as e: print(f"Error: {e}") ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值