测试成功,主要是把host='<broadcast>'改为
HOST = '192.168.25.255'
局域网就测试成功了。
服务器端程序:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from socket import *
import time
# HOST = '<broadcast>'
HOST = '192.168.25.255'
PORT = 21567
BUFSIZE = 20
ADDR = (HOST, PORT)
udpCliSock = socket(AF_INET, SOCK_DGRAM)
#设置阻塞
udpCliSock.setblocking(1)
#设置超时时间
udpCliSock.settimeout(2)
udpCliSock.bind(('', 0))
udpCliSock.setsockopt(SOL_SOCKET, SO_BROADCAST, 1)
while True:
data=b"Robot Online!"
print("sending -> %s" %data)
udpCliSock.sendto(data,ADDR)
try:
data,ADDR = udpCliSock.recvfrom(BUFSIZE)
if data:
print(data)
time.sleep(0.2)
except Exception as E:
continue
udpCliSock.close()
接收端程序:
# !/usr/bin/env python
# -*- coding:UTF-8 -*-
from socket import *
from time import ctime
HOST = '192.168.25.97'
HOST = '127.0.0.1'
PORT = 21567
BUFSIZE = 20
ADDR = (HOST ,PORT)
udpSerSock = socket(AF_INET, SOCK_DGRAM)
# 设置阻塞
udpSerSock.setblocking(1)
# 设置超时时间 8s
udpSerSock.settimeout(3)
udpSerSock.bind(('' ,PORT))
RobotOnline= False
while True:
try:
data, addr = udpSerSock.recvfrom(BUFSIZE)
print('Robot Online!')
print('received message from %s >> %s' % (addr, data))
udpSerSock.sendto(b"Confirmed!", addr)
except Exception as e:
print('Robot Off',e)
udpSerSock.close()
参考:https://blog.csdn.net/u010918541/article/details/78235306?locationNum=8&fps=1