假设我有一台服务器,它有多个域名可以解析为其IP地址。例如,我的服务器是10.0.0.33,可以由serverA.mysite.com
,serverB.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的答案。
答案 0 :(得分:1)
不,TCP / IP连接在IP地址级别工作,因此您无法确定客户端如何获取服务器正在侦听的IP地址。
HTTP通过要求(从1.0开始)客户端将原始主机名作为请求数据的一部分发送来解决此问题。
答案 1 :(得分:0)
我相信 - 您正在监听INADDR_ANY ("0.0.0.0")
并且想知道客户端连接到哪一个,如果您正在监听多个端口?这很简单,您应该在s.getsockname
之后使用accept
。所以你的代码看起来像这样
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()