我连接本地主机上的自己的socket遇到了麻烦。使用代码
应该打开端口4458,然后另一个脚本将向其发送一些字符。这两个脚本都应该在同一台树莓派上运行,而“服务器”将以sudo方式执行(以访问GPIO),而另一个脚本则不需要,并担任聊天机器人。
我在树莓派上运行服务器(带有python 3.4.1),在我的笔记本电脑上运行客户端(Mac,python 3.4.2),没有遇到麻烦。
也可以反过来,在笔记本电脑上运行服务器脚本,在树莓派上运行客户端脚本。
最终测试表明,在所述的Macbook上,它对于服务器和客户端都有效。
只有在Pi上运行服务器和客户端时才无法工作。
程序会冻结。
如果有用的话,这是我缩短的代码:
这将导致以下结果:
s.connect(('127.0.0.1', 4458))
(或“localhost”)需要很长时间,最终会超时并显示TimeoutError: [Errno 110] Connection timed out
。应该打开端口4458,然后另一个脚本将向其发送一些字符。这两个脚本都应该在同一台树莓派上运行,而“服务器”将以sudo方式执行(以访问GPIO),而另一个脚本则不需要,并担任聊天机器人。
我在树莓派上运行服务器(带有python 3.4.1),在我的笔记本电脑上运行客户端(Mac,python 3.4.2),没有遇到麻烦。
也可以反过来,在笔记本电脑上运行服务器脚本,在树莓派上运行客户端脚本。
最终测试表明,在所述的Macbook上,它对于服务器和客户端都有效。
只有在Pi上运行服务器和客户端时才无法工作。
程序会冻结。
如果有用的话,这是我缩短的代码:
# $ sudo python3 server.py
__author__ = 'luckydonald'
import socket # server
import time # wait for retry
import threading
class Server(threading.Thread):
port = 4458;
QUIT = False
def run(self):
s = socket.socket()
failed = True
print ("Starting Server on Port %d" % (self.port))
while failed:
try:
s.bind(("", self.port))
except Exception as err:
print(err)
print("Port assignment Failed. Retring in 1 second.")
time.sleep(1)
else:
failed = False
print("Success.")
while not self.QUIT:
print("Listening!")
conn, addr = s.accept() # freezes here
print("Got something: %s , %s" %(str(conn), str(addr)))
while not self.QUIT:
result = conn.recv(1)
print("Got result: " + str(result))
server = Server();
server.daemon = True
server.run();
# server.start();
对于客户端:
# python3 cilent.py
s = socket.socket()
print("connecting...")
s.connect(("localhost",4458)) # also tried "172.0.0.1" # freezes here
print("connected!")
s.sendall("+".encode("utf-8"))
s.sendall("-".encode("utf-8"))
s.close()
这将导致以下结果: