首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用套接字通过主机名进行连接是可行的,但并不适用于所有端口。

使用套接字通过主机名进行连接是可行的,但并不适用于所有端口。
EN

Stack Overflow用户
提问于 2013-02-03 16:07:22
回答 1查看 4.9K关注 0票数 1

我想了解套接字是如何工作的,所以我浏览了何图文档,并尝试编写自己的代码。服务器端如下所示:

代码语言:javascript
复制
ssock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
assert socket.gethostname() == HOST
ssock.bind((HOST, PORT))
ssock.listen(5)
while True:
    csock, address = ssock.accept()
    print('Accepted connection from', address)
    t = threading.Thread(target=server, args=(csock,))
    t.start()

客户方是:

代码语言:javascript
复制
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((HOST, PORT))

这些都在一个模块中,所以常量是相同的。这不管用。当我尝试连接时,我会得到一个ConnectionRefusedError: [Errno 111] Connection refused

然而,

  1. 当我试图通过主机名连接到另一个端口时,它可以工作: 在4: s.connect(主机,22)在5: s.recv(1024) Out5: b'SSH-2.0-OpenSSH_5.9p1 Debian-5 ubuntu1\r‘ (显然,这不是我在服务器上处理连接的应用程序)。
  2. 当我在服务器代码中将主机名更改为本地IP地址时,我也可以连接到我的端口(使用IP作为主机字符串)。

这些情况的结合使我困惑不解。有人能解释一下这种行为吗?

编辑:如果在服务器代码中使用IP,似乎可以与HOST连接。但是为什么它不像在如何操作中那样工作呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-03 17:08:29

绑定到"“而不是宿主:

代码语言:javascript
复制
ssock.bind(("", PORT))
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14674416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档