tcp socket server获取使用的服务器客户端的名称

时间:2012-08-05 23:14:59

标签: sockets tcp

假设我有一台服务器,它有多个域名可以解析为其IP地址。例如,我的服务器是10.0.0.33,可以由serverA.mysite.comserverB.mysite.comserverC.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的答案。

2 个答案:

答案 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()