首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >发送UDP数据包,但不确定设备是否应答

发送UDP数据包,但不确定设备是否应答
EN

Stack Overflow用户
提问于 2018-02-22 18:30:25
回答 1查看 36关注 0票数 0

我试图在一个特定的端口上广播一个特定的数字,当他们看到这个数字时,一个特定的设备就会做出响应。这些设备将响应以下信息:

MAC = 00:12:34:56:78:9a IP = 10.17.253.98 网络获取模式= DHCP 支持的协议版本=3 供应商=遗产 产品= USB 固件= 1.8.5

这是我开始做的事。具体号码是"222456",端口是12345,广播子网是10.17.253

代码语言:javascript
复制
import socket

from socket import *
cs = socket(AF_INET, SOCK_DGRAM)
cs.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
cs.setsockopt(SOL_SOCKET, SO_BROADCAST, 1)
cs.sendto('222456', ('10.17.253.255', 12345))

from socket import *
s=socket(AF_INET, SOCK_DGRAM)
s.bind(('',12345))
while(1):
    m=s.recvfrom(8192)
    print 'len(m)='+str(len(m))
    print 'len(m[0])='+str(len(m[0]))    
    print m[0]

    print 'len(m[1])='+str(len(m[1]))    
    print m[1]  

看着威雷沙克,我看到"222456“号在12345端口被广播。然而,我得到的回报是:

代码语言:javascript
复制
len(m)=2
len(m[0])=10
/ô¢
len(m[1])=2
('10.17.253.22', 6971)

除了没有得到我应该得到的,返回的IP也不是正确的IP。我也不知道/ô¢是什么意思。

EN

回答 1

Stack Overflow用户

发布于 2018-02-22 19:19:35

当您尝试用套接字发送消息时,您需要使用泡菜、json或简单的解码来进行对象序列化。如果您想发送一个str,我认为最好的方法是创建一个.decode,但是如果您需要发送一个更多的str,您可以将这些信息放到列表中,并使用泡菜或json来进行对象序列化,也许您可以更改它并将对象序列化放在sendto上。

代码语言:javascript
复制
m=s.recvfrom(8192)

到这个

代码语言:javascript
复制
data, addr =s.recvfrom(1024)

我不记得为什么,但是put 1024是最有效的方法(我认为),并且在获取数据后使对象序列化相反,如果您使用.encode和泡菜.loads。如果您使用的是Python2,我认为您可以使用cPickle来完成这个任务。在Python3中,cPickle并不存在,但是他的方法在泡菜库上。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48934804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档