我试图让我的机器人通过套接字与我的PC进行通信,方法是在我自己的家庭网络上使用本地IP地址(不是我网络之外的设备)。机器人充当服务器,我自己的PC充当客户机/主机。我不知道我的机器人上有哪些端口是开放的,但我确实知道机器人上的端口22是开放的(这是SSH端口)。该机器人是一个乐高EV3机器人,除了它已经安装了一些ev3python软件。当我运行我的程序时,我在服务器(我的机器人)上得到以下错误:
File "/home/robot/server/server.py", line 24, in <module>
File "socket/socket.py", line 50, in bind
OSError: 99这是我带注释的代码
#!/usr/bin/env pybricks-micropython
from pybricks.hubs import EV3Brick
from pybricks.ev3devices import Motor
from pybricks.parameters import Port
# Create your objects here
# Initialize the EV3 Brick.
ev3 = EV3Brick()
# Initialize a motor at port B.
#test_motor = Motor(Port.B)
import socket
hostIPAddress = "xx.xx.xx.xx" #the local IP address of my PC on my home network
backlog = 1
size = 1024
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((hostIPAddress,22))#22 is the port number I am using. (THIS IS ALSO THE LINE WHERE THE ERROR IS COMING FROM)
s.listen(backlog)
try:
client, address = s.accept()
while 1:
data = client.recv(size)
if data:
draw_text(89, 64, data, text_color=Color.RED, background_color=None)
clear()
if data == "beep":
ev3.speaker.beep(frequency=1000, duration=500)
#if data == "move":
#test_motor.run_target(500, 90)
except:
print("Closing socket")
client.close()
s.close()下面是客户机/主机的代码(我不认为这会有帮助,但它可能有用):
import socket
serverIPAddress = "xx.xx.xx.xx" #the local IP address of my robot on my home network
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((serverIPAddress,22))
while 1:
text = input()
if text == "quit":
break
s.send(bytes(text, 'UTF-8'))
s.close()发布于 2021-06-14 12:24:47
hostIPAddress = "xx.xx.xx.xx" #the local IP address of my PC on my home network
backlog = 1
size = 1024
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((hostIPAddress,22))#22 is the port number I am using. (THIS IS ALSO THE LINE WHERE THE ERROR IS COMING FROM)
s.listen(backlog)这里至少有两个问题:
您正在尝试将套接字绑定到远程系统的IP地址。这不是bind所做的;bind设置套接字的本地地址(通常只用于侦听套接字,比如您的套接字)。由于您可能不关心机器人监听的IP地址,所以可以使用0.0.0.0,意思是“任意IP”。
接下来,您将尝试侦听另一个服务已经使用的端口(端口22上的ssh)。你应该为你的服务决定另一个港口。我建议使用高于1024的端口,作为下面的端口,这些端口通常是“特权”的,并且需要root用户来监听。只要没有防火墙,任何端口都可以。
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("0.0.0.0", 5555))https://stackoverflow.com/questions/67969893
复制相似问题