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()