我试图在一个特定的端口上广播一个特定的数字,当他们看到这个数字时,一个特定的设备就会做出响应。这些设备将响应以下信息:
MAC = 00:12:34:56:78:9a IP = 10.17.253.98 网络获取模式= DHCP 支持的协议版本=3 供应商=遗产 产品= USB 固件= 1.8.5
这是我开始做的事。具体号码是"222456",端口是12345,广播子网是10.17.253
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端口被广播。然而,我得到的回报是:
len(m)=2
len(m[0])=10
/ô¢
len(m[1])=2
('10.17.253.22', 6971)除了没有得到我应该得到的,返回的IP也不是正确的IP。我也不知道/ô¢是什么意思。
发布于 2018-02-22 19:19:35
当您尝试用套接字发送消息时,您需要使用泡菜、json或简单的解码来进行对象序列化。如果您想发送一个str,我认为最好的方法是创建一个.decode,但是如果您需要发送一个更多的str,您可以将这些信息放到列表中,并使用泡菜或json来进行对象序列化,也许您可以更改它并将对象序列化放在sendto上。
m=s.recvfrom(8192)到这个
data, addr =s.recvfrom(1024)我不记得为什么,但是put 1024是最有效的方法(我认为),并且在获取数据后使对象序列化相反,如果您使用.encode和泡菜.loads。如果您使用的是Python2,我认为您可以使用cPickle来完成这个任务。在Python3中,cPickle并不存在,但是他的方法在泡菜库上。
https://stackoverflow.com/questions/48934804
复制相似问题