我有一个应用程序,软件定义无线电,在一个端口上广播UDP数据包,告诉听众已经设置了什么频率和解调模式(等等).

我编写了一个演示python客户端(下面的代码)来监听端口,并将相应数据包中的信息转储到控制台.

这些都在OSX 10.6,Snow Leopard下运行.他们在那里工作.

我的问题是:Python应用程序必须在无线电应用程序之前启动,或者在绑定期间声称端口已在使用(ERRNO 47),我不明白为什么.无线电应用正在广播UDP;当然我想容纳多个听众 – 这就是广播的想法,或者至少,所以我想.

所以这里是Python代码(由于堆栈溢出真的很愚蠢“make-it-code”缩进,缩进有点混乱,但我保证你没关系):

#!/usr/bin/python

import select, socket

# AA7AS - for SdrDx UDP broadcast

# this is a sample python script that captures the UDP messages

# that are coming from SdrDx. SdrDx tells you what frequency and

# mode it has been set to. This, in turn, would be used to tell

# another radio to tune to that frequency and mode.

# UDP packet from SdrDx is zero terminated, but receiving the

# packet makes it seem like the string contains zeros all the

# way out to the 1024th character. This function extracts a

# python string up to the point where it hits the first zero,

# then returns that string.

# -----------------------------------------------------------

def zeroterm(msg):

counter = 0;

for c in msg:

if ord(c) != 0:

counter += 1

strn = msg[:counter]

return strn

port = 58083 # port where we expect to get a msg

bufferSize = 1024 # room for message

# Create port to listen upon

# --------------------------

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

try:

s.bind(('', port))

except:

print 'failure to bind'

s.close()

raise

s.setblocking(0)

# Listen for messages

# -------------------

looping = True

while looping:

try:

result = select.select([s],[],[])

except: # you can kill the client here with control-c in its shell

s.close() # must close socket

print 'Closing, exception encountered during select' # warn

raise SystemExit # and quit

msg = result[0][0].recv(bufferSize) # actually fetch the UDP data

msg = zeroterm(msg) # convert content into python string

# in next line, [] contain optional repeats

# message format is keyword:data[|keyword:data]

# where from 1...n keyword:data pairs may appear, up to 1024 bytes

# ----------------------------------------------------------------

try:

msgs = msg.split('|') # can be more than one message in packet

except: # failed to split

msgs = [] # on the other hand, can just be one. :)

msgs.append(msg) # so build array with that one.

for m in msgs: # now, for every message we have

keyw,data = m.split(':') # break into keyword and data

print keyw + "-->" + data # you'd do something with this

if keyw == "closing": # Our client terminates when SdrDx does

looping = False # loop stops

s.close() # must close socket

print 'Normal termination'

作为参考,这是发送UDP消息的Qt代码:

建立:

bcast = new QHostAddress("192.168.1.255");

if (bcast)

{

udpSocketSend = new QUdpSocket(0);

if (udpSocketSend)

{

udpSocketSend->bind(*bcast, txudp);

}

}

广播:

if (udpSocketSend)

{

QByteArray *datagram = new QByteArray(1024,0); // datagram is full of zeroes

strcpy(datagram->data(),msg); // except where text message is in it at beginning

udpSocketSend->writeDatagram(*datagram, QHostAddress::Broadcast,txudp); // send

}

python监听udp端口,Python和UDP监听相关推荐

  1. python 监听tcp端口_创建TCP监听_创建TCP监听_功能示例_Python SDK示例_SDK 参考_开发指南_负载均衡 - 阿里云...

    # encoding=utf-8 import json import sys # 调用AcsClient参数进行身份验证 from aliyunsdkcore.client import AcsCl ...

  2. python连接netcat监听的端口_netcat使用

    前言 最近在做渗透测试的时候遇到了端口监听和shell的反弹问题,在这个过程中自己对Netcat这一款神器有了新的认识,现将一些Netcat的用法做一个小总结,希望对各位有帮助! Netcat简介 N ...

  3. Linux中不同进程同一个端口,linux系统实现多个进程监听同一个端口

    通过 fork 创建子进程的方式可以实现父子进程监听相同的端口. 方法:在绑定端口号(bind函数)之后,监听端口号之前(listen函数),用fork()函数生成子进程,这样子进程就可以克隆父进程, ...

  4. 测试udp端口状态 curl_检测TCP/UDP端口的连通性

    大家在工作中,应该经常会用到监测tcp.udp端口的场景,tcp的端口连接大家应该都知道,但是udp就相对来说比较麻烦一些了,所以今天主要给大家分享一个如何监测upd端口是否在线的功能. 1 TCP端 ...

  5. 16.4 配置Tomcat监听80端口 16.5/16.6/16.7 配置Tomcat虚拟主机16.8 Tomcat日志

    2019独角兽企业重金招聘Python工程师标准>>> 16.4 配置Tomcat监听80端口 直接访问,使用默认的web服务,需要改动端口为80,如果不是80端口那么访问页面的时候 ...

  6. Linux工作笔记-查看tcp与udp端口并对比Windows简单分析

    Linux查看端口: -t : 指明显示TCP端口 -u : 指明显示UDP端口 -l : 仅显示监听套接字(所谓套接字就是使应用程序能够读写与收发通讯协议(protocol)与资料的程序) -p : ...

  7. centos 如何测udp端口是否开放_CentOS如何测试端口是否打开

    CentOS如何测试端口是否打开,端口,可以使用,测试,程序,命令 CentOS如何测试端口是否打开 易采站长站,站长之家为您整理了CentOS如何测试端口是否打开的相关内容. CentOS如何测试端 ...

  8. php 9000 端口没起来,PHP无法监听9000端口问题/502错误解决办法

    配置nginx+php服务的时候,打开php文件就显示502,一般这个是php没启动的导致不能正常解析php文件. 因为nginx解析php文件是交给fastcgi_pass 来处理的,默认一般fas ...

  9. 如何使用Nmap扫描所有TCP和UDP端口?

    Nmap is a very useful and popular tool used to scan ports. Nmap by default scans the most popular 10 ...

最新文章

  1. Python 精要参考(第二版) 第六章 函数与函数编程
  2. C#深入解析Json格式内容
  3. 客户端登录提示找不到表0
  4. oracle session_wait,转载:学习Oracle动态性能表-(8)-V$SESSION_WAIT,V$SESSION_EVENT
  5. 关于静态成员变量的谈论
  6. leetcode刷题:零钱兑换
  7. Emacs显示函数列表imenu-list
  8. php挂马检测工具,网站挂马检测工具,网站被挂马在线检测工具 | 帮助信息-动天数据...
  9. 什么是python语言的解释性?
  10. Linux服务器恢复删除数据
  11. captcha图片验证码自动识别
  12. 网段划分 特殊网段(localhost0.0.0.01.1.1.1127.0.0.1)
  13. 控制面板快捷键win10_Win10系统启动变慢怎么办,Win10系统启动变慢解决方法
  14. python显示.arw相机原始数据,并保存为jpg
  15. 抄袭/模仿/致敬的那些事:从《以父之名》说起(转)
  16. 隔年增长的题_2019行测备考:数量关系_浅谈隔年增长率的解法
  17. 服务器系统2012浏览器,关闭Windows 2012系统IE浏览器”增强的安全配置已启用”问题 | 老左笔记...
  18. Linux学习之——/etc/sysconfig目录
  19. 线程池和信号量模拟酒店(旅店)预定房间
  20. short 在JAVA_short在java中是什么类型的

热门文章

  1. 小白学习MySQL - varchar类型字段为什么经常定义成255?
  2. layui tab --隐藏删除图标
  3. 2021/11/18学习笔记:城市建成区的边界
  4. SpringBoot修改启动时的logo图案
  5. 没想到啊!做完这个JAVA项目并写到简历里,我居然拿到了高薪offer
  6. python爬虫入门之————————————————第三节requests详解
  7. 如何将智能设备关联至云开发中的项目?
  8. Kotlin Contracts
  9. 【论文笔记04】Model-driven approach for the design of multi-chainsmart contracts—用于设计多链智能合约的模型驱动方法
  10. unity使用协程简单实现渐明渐暗的过渡效果