连接到本地主机上的套接字

luc*_*ald 5 python sockets localhost raspberry-pi raspbian

我在连接到localhost上自己的套接字时遇到问题。(或“localhost”)将永远花费,并 最终超时
s.connect(('127.0.0.1', 4458))
TimeoutError: [Errno 110] Connection timed out

它应该打开端口 4458,然后另一个脚本将向其发送一些字符。两个脚本都应该在同一个 Raspberry Pi 上运行,而“服务器”脚本将使用 sudo 执行(以访问 GPIO),而另一个则不使用 sudo,成为聊天机器人。

我在 Pi (使用python 3.4.1 )上运行服务器和在我的笔记本电脑(mac,python 3.4.2)上运行客户端没有任何问题。

它还可以反向工作,即笔记本电脑上的服务器脚本和 Raspberry 上的客户端。

作为最终测试,它适用于上述 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();
Run Code Online (Sandbox Code Playgroud)

对于客户来说:

# 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()
Run Code Online (Sandbox Code Playgroud)

它将导致这样的结果:

控制台输出图片