我尝试使用Python使用TCP连接发送和接收数据。我的服务器和客户机在同一个文件中,定义和使用如下。在
在构造函数中,我将服务器定义为:
self.sock_in = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.sock_in.bind((self.host_ip, self.host_port))
self.sock_in.listen(1)
不要担心主机的ip和端口的变量,它们都很好。在
在函数中,我尝试按如下方式发送数据:
^{pr2}$这是我的主要:
def main(self):
rospy.logwarn("Starting...")
while not rospy.is_shutdown():
conn = self.sock_in.accept()
try:
recv_buffer = conn.recv(BUFFERSIZE_IN)
if recv_buffer != "":
msg = recv_buffer.decode('utf-8')
msg_type = msg[:msg.find(',')]
if msg_type == self.pilot_control.MESSAGE_ID:
self.pilot_control_handler(msg, self.pilot_control_publisher)
else:
rospy.logwarn("Received an unimplemented message type '%s'", msg_type)
except socket.error as socket_error:
rospy.logerr("SocketError: %s", str(socket_error))
我得到的错误是:
line 230, in send_83b_package
sock_out.connect((self.remote_ip, self.remote_port))
File "/usr/lib/python2.7/socket.py", line 224, in meth
return getattr(self._sock,name)(*args)
error: [Errno 111] Connection refused
我放了一些print命令来查看它在哪里折叠,显然它没有运行accept命令。在此之前,我可以看到print命令正在工作,但是在accept方法之后什么也没有打印,这意味着它在那里崩溃了。在
我怀疑问题在于同步。也就是说,服务器启动速度不够快。在
有什么想法吗?在
编辑: 其中一个建议是在一个单独的线程上运行服务器,我尝试如下:
def my_tcp_server(self):
# Establish a TCP Connection
self.sock_in = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.sock_in.bind((self.host_ip, self.host_port))
self.sock_in.listen(1)
rospy.logwarn("ready")
while not rospy.is_shutdown():
rospy.logwarn("before accept")
conn, address = self.sock_in.accept()
rospy.logwarn("after accept")
try:
recv_buffer = conn.recv(BUFFERSIZE_IN)
rospy.logwarn("recv works!")
if recv_buffer != "":
msg = recv_buffer.decode('utf-8')
msg_type = msg[:msg.find(',')]
if msg_type == self.pilot_control.MESSAGE_ID:
self.pilot_control_handler(msg, self.pilot_control_publisher)
else:
rospy.logwarn("Received an unimplemented message type '%s'", msg_type)
except socket.error as socket_error:
rospy.logerr("SocketError: %s", str(socket_error))
conn.close()
def main(self):
rospy.logwarn("Starting..")
threading.Thread(target=self.my_tcp_server).start()
在我的构造函数中,调用的顺序如下:
self.main()
self.sendDataFunction()
应该没问题。但是,accept函数仍然不工作,因此没有连接。在
由于您没有提供完整的可执行代码示例,所以我取了您的代码片段并删除了类声明方面,添加了ip/端口等的定义,还添加了套接字超时。不管怎样,在Windows 7x64和32位Python 2.7.8上,这段代码对我很有用:
输出为:
^{2}$我想你的类/构造函数/某些我看不到的东西使你的代码无法工作。在
高温 巴尼
相关问题 更多 >
编程相关推荐