0

假设我有一个服务器,它有多个解析为其 IP 地址的域名。例如,我的服务器是 10.0.0.33,可以通过serverA.mysite.comserverB.mysite.com和访问serverC.mysite.com。如果我有一个使用类似于以下代码的进程运行:

#!/usr/bin/env python

import socket

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.listen(5)

while True:
   client, client_addr = server.accept()
   #server_name = <some function>(client)
   #Do Something with the client knowing the value of servername...


server.close()

有没有办法确定客户端建立的 tcp 连接是针对serverA.mysite.com还是serverB.mysite.com……?

我的示例在 python 中,但我不需要特定于 python 的答案。

4

2 回答 2

1

不,TCP/IP 连接在 IP 地址级别工作,因此您无法确定客户端如何获取服务器正在侦听的 IP 地址。

HTTP 通过要求(从 1.0 开始)客户端将原始主机名作为请求数据的一部分发送来解决此问题。

于 2012-08-05T23:19:44.687 回答
0

我相信 -INADDR_ANY ("0.0.0.0")如果您在多个端口上侦听,您正在侦听并想确切知道客户端连接到哪一个?这相当简单,您应该s.getsocknameaccept. 所以你的代码看起来像这样

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("0.0.0.0", 10000))
s.listen(5)
while True:
    s2 = s.accept()
    print s2.getsockname()
    s2.close()
于 2015-06-14T13:04:15.927 回答