有时为了实现主从机的通讯,需要将主机的数据发布出来,在从机机型接收,下述的服务端和客户端为简单的实现:
server.py:
# https://mp.weixin.qq.com/s/_XyMXpico_LG__soR5pOPQ
import socket
import rospy
from sensor_msgs.msg import LaserScan
s = ''
def socket1():
global s
s=socket.socket() #socket.AF_INET, socket.SOCK_STREAM
# s.bind(('192.168.50.112',1234))
s.bind((socket.gethostname(), 2256))
s.listen(5)
print("Server started, Waiting for request...")
def LaserCB(laser_):
global s
clt,adr = s.accept()
print(f"{adr}Connect success!")
msg_ = bytes(laser_.header.frame_id + ',', 'utf-8')
len_msg = bytes(str(len(msg_) - 1), 'utf-8')
msg_all = msg_ + len_msg
clt.send(msg_all)
clt.close()
if __name__ == '__main__':
rospy.init_node("Socket_node")
socket1()
sub = rospy.Subscriber("/wr_scan_1", LaserScan, LaserCB, queue_size=100)
rospy.spin()
client.py: