标准的python3 TCP
# server
import socket
# 创建 socket 对象
server_socket = socket.socket()
# 绑定 IP 和端口,表明是服务端
server_socket.bind(("localhost", 8888))
# 开始监听,传入一个整数表示最大连接数
server_socket.listen(1)
print("服务端已开始监听,正在等待客户端连接...")
# 等待客户端连接,accept 方法返回连接对象和客户端地址信息
conn, address = server_socket.accept()
print(f"接收到了客户端的连接,客户端的信息:{address}")
# 持续接收和发送消息,直到服务端输入 "exit" 退出
while True:
data = conn.recv(1024).decode("UTF-8")
print(f"客户端发来的消息是:{data}")
msg = input("请输入你要回复客户端的消息:")
if msg == 'exit':
break
conn.send(msg.encode("UTF-8"))
# 关闭连接
conn.close()
server_socket.close()
# 创建 client对象
import socket
# 创建 socket 对象
client_socket = socket.socket()
# 连接服务端,传入服务端主机和端口号
client_socket.connect(("localhost", 8888))
while True:
# 发送消息给服务端
msg = input("请输入要发送给服务端的消息:")
client_socket.send(msg.encode("UTF-8"))
# 接收服务端回复的消息
received_data = client_socket.recv(1024).decode("UTF-8")
print(f"服务端回复的消息是:{received_data}")
# 关闭连接
conn.close()
client_socket.close()
socket常见的发送string(这里嵌入ros)客户端从ros接收数据转发给客户端。
ros发布者:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
########################################################################
#### Copyright 2020 GuYueHome (www.guyuehome.com). ###
########################################################################
# 该例程将发布/person_info话题,自定义消息类型learning_topic::Person
import rospy
from geometry_msgs.msg import Pose
def velocity_publisher():
# ROS节点初始化
rospy.init_node('pose_publisher', anonymous=True)
# 创建一个Publisher,发布名为/person_info的topic,消息类型为learning_topic::Person,队列长度10
person_info_pub = rospy.Publisher('/pose_info', Pose, queue_size=10)
#设置循环的频率
rate = rospy.Rate(10)
i = 1
while not rospy.is_shutdown():
# 初始化learning_topic::Person类型的消息
msg = Pose()
msg.position.y=i
msg.position.x=2
msg.position.z=-0.02
msg.orientation.y=0.06
msg.orientation.x=0.06
msg.orientation.z=0.06
msg.orientation.w=0.06
# 发布消息
person_info_pub.publish(msg)
rospy.loginfo("Publsh person message[%f, %f]",
msg.position.y, msg.position.x)
# 按照循环频率延时
i =i+1
rate.sleep()
if __name__ == '__main__':
try:
velocity_publisher()
except rospy.ROSInterruptException:
pass
服务端,广播(bind)
import string
import socket
import os
import json
import rospy
from geometry_msgs.msg import Pose
service=socket.socket()
service.bind(("192.168.1.129",22222))
service.listen(1)
client,address=service.accept()
def personInfoCallback(msg):
rospy.loginfo("Publsh person message[%d, %d]",
msg.position.y, msg.position.x)
client,address=service.accept()
client_data=client.recv(1024)
msg_send =client_data
print("---",msg_send)
print(type(msg_send))
client.send(msg_send)
def person_subscriber():
# ROS节点初始化
rospy.init_node('person_subscriber', anonymous=True)
# 创建一个Subscriber,订阅名为/person_info的topic,注册回调函数personInfoCallback
rospy.Subscriber("/pose_info", Pose, personInfoCallback)
# 循环等待回调函数
rospy.spin()
client.close()
service.close()
if __name__ == '__main__':
person_subscriber()
客户端:
import socket
import time
import json
import string
client = socket.socket()
client.connect(("192.168.1.129", 22222))
s=client.recv(1024)
print("---",s)
s = list(s)
print(type(s))
print(s)
client.close()
socke发送arry(),应该也能发字典
服务端接收
from socket import *
import pickle
# Set the socket parameters
host = "localhost"
port = 21567
buf = 4096
addr = (host,port)
# Create socket and bind to address
UDPSock = socket(AF_INET,SOCK_DGRAM)
UDPSock.bind(addr)
# Receive messages
while 1:
data,addr = UDPSock.recvfrom(buf)
L = pickle.loads(data)
if not L:
print "Client has exited!"
break
else:
print(L.tolist())
print ("Received message ")
# Close socket
UDPSock.close()
客户端接收
from socket import *
import numpy
from array import*
import pickle
# Set the socket parameters
host = "localhost"
port = 21567
buf = 4096
addr = (host,port)
# Create socket
UDPSock = socket(AF_INET,SOCK_DGRAM)
a = array('i',[1,3,2])
# a = [array('i',[1,3,2])]
# Send messages
while (1):
data = raw_input('yes or now')
if data!= "yes":
break
else:
if(UDPSock.sendto(pickle.dumps(a),addr)):
print "Sending message"
# Close socket
UDPSock.close()

本文介绍了一个Python实现的TCP服务器与客户端通信的例子,并展示了如何将ROS(Robot Operating System)集成到TCP通信中,实现机器人数据的实时传输。
2407

被折叠的 条评论
为什么被折叠?



