【问题标题】:tcp socket server get name of server client usedtcp socket server 获取使用的服务器客户端的名称
【发布时间】:2012-08-02 23:44:04
【问题描述】:

假设我有一个服务器,它有多个解析为其 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 的答案。

【问题讨论】:

    标签: sockets tcp


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      我相信 - 您正在监听 INADDR_ANY ("0.0.0.0") 并且想知道客户端连接到哪个端口,如果您正在监听多个端口?这相当简单,您应该在accept 之后使用s.getsockname。所以你的代码看起来像这样

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-11-29
        • 1970-01-01
        • 2016-10-10
        • 2018-12-30
        • 2019-02-06
        • 1970-01-01
        • 2022-05-11
        相关资源
        最近更新 更多