java - 获取传入连接的域名

标签 java c++ sockets domain-name

我在 Internet 上没有找到关于此主题的任何信息并在这里询问。例如,我有 IP 为 1.1.1.1 和 2.2.2.2 的服务器以及指向它的两个域名 one.example.com 和 example2.net,并且 socke 在端口 1234 上监听传入连接。

例如:

C/C++:

listenfd=socket(AF_INET, SOCK_STREAM, 0);
bind(...);
listen(...);
while(...) accept(...);

或Java:

ServerSocket socket = new ServerSocket(1234);
while(...) {
    Socket connectionSocket = welcomeSocket.accept();
    ...
}

当客户端在我的套接字上接受时,我需要知道客户端使用什么域名/IP 进行连接。它可能是 one.example.com 或 example2.net 和/或 IP 1.1.1.1 或 2.2.2.2(如果仅使用 IP 连接)。

Apache 以某种方式确定了传入请求的 ip/域,我需要在纯套接字代码中做这样的事情。接受 C++(主要)或 Java(或任何其他),我需要了解其机制。

最佳答案

IP 存储在 IP packet header 中你可以从那里阅读它。为了获得主机,您可能必须通过发送 request 来询问 DNS 服务器。 (或使用 function 为您完成)。您甚至可以在 this site 上找到这两个问题的示例。

关于java - 获取传入连接的域名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20037659/

相关文章:

java - Android:将 PreferenceFragment 与单个布局中的其他小部件结合起来

java - 从 .txt 文件读取和显示数据

c++ - 创建没有可调用对象的 boost::thread

java - 无法在 Mac OS X 上通过套接字进行通信

java - 没有如果的计算器

c++ - 声明 `using namespace C;` 对于证明 [namespace.udir]/3 中示例中显示的结果至关重要

c++ - Linux 上哪个版本的 C++ 库符合 "ISO C++ 11"标准?

java - C 客户端套接字数据无法在 Java 服务器中读取

java - 扫描 LAN 中的套接字?

java - 改变JButton的背景颜色