Linux IP Socket 广播器

IPServer

#!/usr/bin/env python   
# -*- coding:UTF-8 -*-  
from socket import *  
from time import ctime 
import thread
import time
import subprocess
import sys

CMD="""
***********CMD*************
a: roscore on
s: robot driver on(odom message)
d: robot laser on
f: robot gmapping on
g: robot navigation on
k: robot webserver on
j:  robot joycontrol

q: roscore off
w: robot driver off(odom message)
e: robot laser off
r: robot gmapping off
t:robot navigation off
k:robot webserver off
u: robot joycontrol off
m:set roscore on robot side for local ros node

***************************
""" 
HOST = '127.0.0.1'  
PORT = 21566  
BUFSIZE = 1024  
ADDR = (HOST,PORT)  
udpSerSock = socket(AF_INET, SOCK_DGRAM)
#设置阻塞
udpSerSock.setblocking(1.5)
#设置超时时间 8s
udpSerSock.settimeout(10)  
udpSerSock.bind(('',PORT))
global RobotAddress
global RES
global SHOW_FLAG
RobotOnline=False
RobotAddress=None
SHOW_FLAG=False

#获取当前文件目录
cpath=sys.path[0]
roscoreNode=None
robotdriverNode=None
robotlaserNode=None

global iprobots
iprobots='IP\n'

def ReceviceData():
	global iprobots	
	global count
	count=0	
	while True:
		global RobotAddress
		global RES
		global SHOW_FLAG
		try: 		
			data, addr = udpSerSock.recvfrom(BUFSIZE)  
			count=count+1			
			#print 'Robot Online!'
			print'received message from %s >> %s' % (addr, data)  
			#print addr			
			if 'Robot' in data:				
				if "".join(data) not in iprobots:					
					#print 123					
					iprobots=iprobots+"".join(addr[0])+"".join(data)
			else:
				if iprobots!="":
					udpSerSock.sendto(iprobots,addr)
			#print'\nreceived message: %s\n'%data 
			#print "robot Online"
			#udpSerSock.sendto("Confirmed!",addr)  
			RobotAddress=addr
			#print "aseg"
			print count			
			if count is 10:
				global count				
				iprobots='IP\n'
				count=0 			
			if SHOW_FLAG:
				print "result:\n%s"%data
				SHOW_FLAG=False
			
		except Exception,e:
			print e
			#continue
def getData():
	global RobotAddress
	try: 
		data, addr = udpSerSock.recvfrom(BUFSIZE)  
		#print'\nreceived message: %s\n'%data 
	except Exception:
		print 'Robot Off'	
		#continue
thread.start_new_thread(ReceviceData, ())
while True:  
	#time.sleep(1)
	#ReceviceData()
	#getData()
	if RobotAddress !=None:
		#data=raw_input("please input control cmd:")
		#udpSerSock.sendto(data,RobotAddress)
		#SHOW_FLAG=True
		time.sleep(1)
udpSerSock.close()  

RobotClient

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from socket import *  
from time import ctime  
import os
import subprocess
import sys
import time
import commands



HOST1 = '<broadcast>'  
HOST = '192.168.27.53'  
PORT = 21566  
BUFSIZE = 1024
ADDR = (HOST, PORT)
ADDR_LOCAL = (HOST1, PORT)   
udpCliSock = socket(AF_INET, SOCK_DGRAM)
#设置阻塞
udpCliSock.setblocking(2)
#设置超时时间
udpCliSock.settimeout(1)
#udpCliSock.bind(('', 0))  
#udpCliSock.setsockopt(SOL_SOCKET, SO_BROADCAST, 1)
  

def paraseCMD(msg):
	if "ok" in msg:
		print 'exit'		
		exit(0)	
def SendStatus():
	resultMessage="Robot online 福喜2号!\n"
	try:
		udpCliSock.sendto(resultMessage,ADDR_LOCAL)
		udpCliSock.sendto(resultMessage,ADDR)
		
	except Exception:
		return
while True:  
	SendStatus()
	try:
		data,ADDDR = udpCliSock.recvfrom(BUFSIZE)
		paraseCMD(data)
		time.sleep(1)
	except Exception,e :
		#print e		
		#print "Waiting Message"
		continue
udpCliSock.close()  

getRobtoIP

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from socket import *  
from time import ctime  
import os
import subprocess
import sys
import time
import commands



HOST1 = '<broadcast>'  
HOST = '192.168.27.53'  
PORT = 21566  
BUFSIZE = 1024
ADDR = (HOST, PORT)
ADDR_LOCAL = (HOST1, PORT)   
udpCliSock = socket(AF_INET, SOCK_DGRAM)
#设置阻塞
udpCliSock.setblocking(5)
#设置超时时间
udpCliSock.settimeout(1)
#udpCliSock.bind(('', 0))  
#udpCliSock.setsockopt(SOL_SOCKET, SO_BROADCAST, 1)
  

def paraseCMD(msg):
	if "ok" in msg:
		print 'exit'		
		exit(0)	
def SendStatus():
	resultMessage="want ip!\n"
	try:
		udpCliSock.sendto(resultMessage,ADDR)
		udpCliSock.sendto(resultMessage,ADDR_LOCAL)
	except Exception:
		return
while True:  
	SendStatus()
	try:
		data,ADDDR = udpCliSock.recvfrom(BUFSIZE)
		print data
		time.sleep(1)
	except Exception,e :
		#print e		
		print "Waiting Message"
		continue
udpCliSock.close()  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值