【问题标题】:Python Socket connect two devices on same networkPython Socket连接同一网络上的两个设备
【发布时间】:2019-08-12 19:59:25
【问题描述】:

我正在尝试从同一网络上的两台计算机连接一个简单的服务器和客户端。客户端和服务器都无法“找到”对方,因为它们分别不会经过.connect() 和.accept()。我做错了什么?

(Windows 10)

服务器:

import socket

HOST = socket.gethostname()    #Returns: "WASS104983"
#I have also tried socket.gethostbyname(socket.gethostname)), returning: "25.38.252.147"
PORT = 50007

sock = socket.socket()
sock.bind((HOST, PORT))
sock.listen(5)

print("Awaiting connection... ")

(clnt, addr) = sock.accept()

print("Client connected")
…

和客户:

import socket

HOST = "WASS104983"    #Or "25.38.252.147", depending on the servers setup
PORT = 50007

sock = socket.socket()

print("Attempting connection... ")

sock.connect((HOST, PORT))

print("Connected")
…

我之前已经让这个工作了,所以我不确定为什么现在没有。

我知道有几个问题与此有关,但似乎没有一个能涵盖我的问题。

另外,wifi 扩展器应该不会干扰本地传输吧?

【问题讨论】:

    标签: python windows sockets


    【解决方案1】:

    我一直看到服务器设置是这样的:

    import socket
    import threading
    
    bind_ip = '0.0.0.0'
    bind_port = 9999
    
    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server.bind((bind_ip, bind_port))
    server.listen(5)
    
    print("[*] Listening on {}:{}".format(bind_ip, bind_port))
    
    
    def handle_client(client_socket):
        request = client_socket.recv(1024)
        print('received: {}'.format(request))
        client_socket.send(b'ACK!')
        client_socket.close()
    
    
    while True:
        client, addr = server.accept()
        print("[*] Accepted connection from: {}:{}".format(addr[0], addr[1]))
        client_handler = threading.Thread(target=handle_client, args=(client,))
        client_handler.start()*
    

    我认为与您的帖子的一个重要区别可能是接受连接的服务器处于无限循环中。你试过吗?

    【讨论】:

    • 确实有。据我了解,只有在需要多次调用 .accept() 方法(显然)时才需要循环,如果它设置为超时或接受多个客户端连接。我没有为我的设置超时,所以它不应该超过那条线,直到它找到一个要连接的客户端(它不会因为“客户端连接”从未打印到控制台)。我也尝试过使用“0.0.0.0”主机名,但它会引发一个错误,指出它无效。不确定:/
    • 我认为问题很可能是你的IP。看起来您使用的是公共 IP,但如果它们在同一个网络上,则私有 IP 可能会使用像 192.168.0-255.0-255 或 10.0.0.0-255 这样的 IP(为私有内部网络指定了类似的特定范围)。我建议打开命令提示符并运行 ipconfig (windows) 或 ifconfig (linux for future viewers) 并查找您的本地 ipv4 地址并使用它
    • 是的,我也尝试过(很抱歉之前没有说明这一点)但无济于事。
    • 嗯。你说I have gotten this to work before。从那以后发生了什么变化?
    • 我不太清楚,这就是问题所在。事实上,我之前已经通过相同的网络和不同的网络连接了两台计算机。这个简单的服务器是一个更大、更复杂的项目的一部分,但是在尝试连接它时,我求助于基础知识来发现问题。在较大的项目中,我在端口转发和防火墙方面搞砸了一些,所以我可能搞砸了。附言感谢您的坚持。
    猜你喜欢
    • 2021-10-13
    • 1970-01-01
    • 2018-06-23
    • 2020-10-23
    • 2016-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多