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

5
我连接本地主机上的自己的socket遇到了麻烦。使用代码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()

这将导致以下结果:

控制台输出图片


你好luckydonald,你能告诉我你是如何解决这个问题的吗?因为我也遇到了同样的问题。 - Maulik
@MaulikBarad 接受的答案就是我的解决方案。 - luckydonald
2个回答

2
我没想到的是 localhost/127.0.0.1 没有起作用。
引用:

Ping results
100% package loss

我在我的hosts文件中有一个格式错误的条目。

0

您应该检查以下项目:

  1. 已安装Internet信息服务
  2. IIS正在运行
  3. 防火墙授予运行python.exe所需的端口

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接