python udp报文接收

# coding=utf-8
#!/usr/bin/env python

from PyQt5.QtCore import QPoint, QRect, QSize, Qt
from PyQt5.QtWidgets import (QApplication, QLayout, QPushButton, QSizePolicy,QVBoxLayout,
        QWidget)
from PyQt5.Qt import QTextEdit, QLineEdit
from PyQt5.QtNetwork import *
import struct
import datetime

def num2Ip(num):
    ip = "%d.%d.%d.%d" % ((num>>24)&0xff,(num>>16)&0xff,(num>>8)&0xff,num&0xff)
    return ip

class Window(QWidget):
    def __init__(self):
        super(Window, self).__init__()

        self.fp = open("test.log","w")
        flowLayout = QVBoxLayout()
        self.ip = QLineEdit()
        self.textEdit  = QTextEdit()
        self.textEdit.setReadOnly(True)
        self.btn = QPushButton("清空日志")
        self.btn.clicked.connect(self.clearData)
        flowLayout.addWidget(self.btn)
        flowLayout.addWidget(self.textEdit)
        self.setLayout(flowLayout)

        self.setWindowTitle("日志监控")

        self.port = 7700
        self.udpSocket = QUdpSocket(self)
        self.udpSocket.readyRead.connect(self.dataReceive)
        result = self.udpSocket.bind(self.port)

    def clearData(self):
        self.textEdit.clear()

    def dataReceive(self):
        while self.udpSocket.hasPendingDatagrams():
            msglist = self.udpSocket.readDatagram(self.port)
            msg = msglist[0]
            length = len(msg)
            if length == 23:
                chl_id,ip_num,slot_id,counter,receiveFrameMode,snr,offsetFreqStatus = struct.unpack(‘!BIHIBHI‘, msg[0:-5])
                time=datetime.datetime.now()
                text = (time,chl_id,num2Ip(ip_num),slot_id,counter,receiveFrameMode,snr,offsetFreqStatus)
                self.textEdit.insertPlainText(str(text))
                self.textEdit.insertPlainText("\r\n")
                self.fp.write(str(text) + "\r\n")

if __name__ == ‘__main__‘:

    import sys

    app = QApplication(sys.argv)
    mainWin = Window()
    mainWin.show()
    sys.exit(app.exec_())
时间: 2024-11-05 11:44:04

python udp报文接收的相关文章

Python Udp Socket

socket(套接字),传输层通信的端点,由IP和端口号组成(IP,Port),可以通过socket精确地找到服务器上的进程并与之通信 python2.6实现,基于AF_INET(网络套接字) 类型SOCKET_STREAM(TCP套接字),SOCKET_DGRAM(UDP套接字) UDP socket实现较TCP要简单,没有建立连接的过程,服务端无限循环接收数据,处理数据返回,客户端也无需建立通信连接, 直接发送数据接收数据即可 UDP socket通信逻辑 UDP服务端:创建socket>>

tcp,udp报文最大长度

tcp,udp报文最大长度是怎么样的呢? 先来看看各个报文格式: ip报文 tcp报文 udp报文 ip和udp都有16位的长度字段,所以ip和udp报文的最大负载长度应该为2^16,64MB 网络层限制: MTU(Maximum Transmission Unit,最大传输单元),这限制了ip报文长度,ip报文长度大于mtu,就需要分片.通常设为1500字节. 在网络层,ip提供不可靠传输服务,一旦收到的数据报分片丢失部分或部分出现差错,就会全部丢弃,而不会选择重传. 传输层限制: tcp协议

linux 报文接收的上下半段阅读感想

1. linux报文接收的上下半段处理从本质上是因为系统的快速中断不能长时间滞留, 以避免影响后续外部事件的处理. 2. 因此将报文的接收分为硬件中断产生的上半部分和由上半部分软件中断触发的下半部分. 上半部分负责接收报文和将其分配给处理它的内核线程, 下半部分由内核线程具体处理. 3. 目前linux内核在该部分代码较多主要来源于两方面,NAPI和内核抢占. 4. 从linux2.6开始追加了内核抢占,与以往不同点在于以前只能由系统线程抢占用户线程, 现在内核之间也能相互抢占.这样的收益主要在

Python UDP broadcast PermissionError: [Errno 13] Permission denied

/********************************************************************** * Python UDP broadcast PermissionError: [Errno 13] Permission denied * 说明: * 使用Python3做UDP广播,遇到这个权限问题,当时就一阵惊讶,第一看 * 到这种无权限的问题. * * 2016-12-10 深圳 南山平山村 曾剑锋 ***********************

实现UDP高效接收/响应

环境Linux g++6.3.0 问题一:一个ip地址如何接收高并发请求 问题二:如何高并发响应消息 发送请求端只能通过ip地址+端口号向服务器发送请求码,所以服务器只能用一个UDP去绑定此ip以及端口号.而如何完成高并发发送响应消息, 谁去发送这个响应消息,接收请求信息的UDP?这就造成其中一个任务必须等待另一个任务执行完毕,sendto是非阻塞,而recvfrom是阻塞,若 执行recvfrom碰巧没有下个请求信息或者网络阻塞造成UDP丢失,那么sendto岂是不能执行(一直等待recvfr

计算机网络(六),UDP报文段详解

目录 1.UDP作用 2.UDP报文段详解 六.UDP报文段详解 1.UDP作用 (1)面向非连接 (2)不维护连接状态,支持同时向多个客户端传送相同的消息 (3)报文段报头只有8个字节,格外开销较小 (4)吞吐量只受限于数据生成速率.传输速率以及机器性能 (5)尽最大努力交付,不保证可靠交付,不需要维持复杂的链接状态表 (6)面向报文,不对应用程序提交的报文信息进行拆分或者合并 2.UDP报文段详 (1)源端口-2字节 (2)目标端口-2字节 (3)长度-2字节 (4)校验位-2字节 (5)数

python udp sniffer主机发现工具

思想: 基于udp协议向遍历子网内所有ip地址,发送udp数据包到一个关闭的端口(你认为可能关闭的端口,如不放心可指定多个),如果受到回应的ICMP包说明此主机存在.udp发送数据包开销比较小.可以在此基础上增减namp调用的功能,完整扫描发现的主机上的端口. 使用的python模块:netaddr,socket,ctypes,struct,threading,time,os #!/usr/bin/pythonfrom netaddr import IPAddress,IPNetworkimpo

[UDP] UDP 报文数据(CoAP protocol)

UDP 机器控制项目 协议报文格式: Ver +                  T       +     TKL + Code + MessageID + 11111111 + Command + Payload 01   + ( 00 | 01 | 02 | 03) + (000000) 40 02 00 00 FF 01 00 E0 4C 1E 5C 4C  // dev->ser   设备登陆请求: 报文编号:0,ID为00 E0 4C 1E 5C 4C 60 45 00 00 FF

python udp编程实例

与python tcp编程对比见 http://blog.csdn.net/aspnet_lyc/article/details/39854569 c++ udp/tcp 编程见 http://blog.csdn.net/aspnet_lyc/article/details/38946915 http://blog.csdn.net/aspnet_lyc/article/details/34444111 server import socket PORT = 9999 BIND_ADDR = '