繁体   English   中英

无法连接到“” ip 地址上的套接字。 Python

[英]Cannot connect to socket on '' ip address. Python

他,我有一个服务器 python 脚本,它侦听 ip 地址''和端口 1337,现在我正在尝试在客户端连接到该套接字。 但出于某种原因,我不能那样做。 如果我将绑定地址更改为"127.0.0.1" ,它会工作得很好,但我被告知要使用此 ip 地址''

有人可以解释一下为什么这是 heppening 以及这个 ip 地址是什么意思吗?

这是我的服务器:

import socket
from threading import Thread

HOST = '' 
PORT = 1337

def main():
    try:
        s.bind((HOST, PORT))
    except socket.error as msg:
        print('Bind failed. Error Code : ' + str(msg[0]) + ' Message ' + msg[1])
        sys.exit()

    print('Socket bind complete')

    s.listen(10)
    print('Socket now listening')

    while 1:
        conn, addr = s.accept()
        print('Connected with ' + addr[0] + ':' + str(addr[1]))

        new_client = Thread(target=clientthread, args=(conn,))
        new_client.start()

    s.close()

if __name__ == "__main__":
    main()

这是我的客户:

import socket

HOST = ''
PORT = 1337

def main():
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((HOST, PORT))
    print("Worked!")
    s.close()

if __name__ == "__main__":
    main

这是我得到的消息:

Traceback (most recent call last):
  File "C:\Users\magshimim\Downloads\responder_client.py", line 4, in <module>
    s.connect((HOST, PORT))
OSError: [WinError 10049] The requested address is not valid in its context

Python 套接字模块的文档说:

一对 (host, port) 用于 AF_INET 地址族,其中host是一个字符串,表示互联网域表示法中的主机名,如“daring.cwi.nl”或 IPv4 地址,如“100.50.200.5”,端口是一个整数。

对于 IPv4 地址,接受两种特殊形式而不是主机地址: ''表示INADDR_ANY ,用于绑定到所有接口

正如 Michael Butscher 评论的那样,服务器可以绑定到所有接口以进行侦听,这可能包括多个 Internet 连接、本地网络接口或虚拟机网络等。

客户端无法连接到所有接口 - 想象一下尝试打开从您的计算机到“所有网站”的单个连接,这是行不通的,您将需要许多连接,每个连接一个。 您需要提供一个连接地址, 127.0.0.1是一个特殊地址,始终表示“回送至此本地计算机”。

服务器代码中的IP地址'' (即通配符)代表任意地址。 这意味着服务器将监听所有可用的网络接口。

''等同于0.0.0.0并且仅在服务器中使用,而不是在客户端中使用。 对于客户端,它需要知道服务器的实际 IP 地址才能连接到它。

因此,在客户端代码中使用 IP 地址127.0.0.1已经是正确的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM