无法在 gSOAP 服务器中获取 SOAP 客户端的 IP 地址



我正在编写 SOAP 客户端和服务器,我的服务器使用 gSOAP 2.8.15 C++,我的客户端使用 JAX-WS 2.0 使用 Java。

当我从客户端连接到服务器时,我希望能够看到有关连接的一些信息,特别是连接到服务器的客户端的 IP 地址是什么。我做了一些研究,发现可以使用如下所示的内容从gSOAP获取此信息:

printf ("starting session with %d.%d.%d.%dn",
       (int) (soap->ip>>24) & 0xff,
       (int) (soap->ip>>16) & 0xff,
       (int) (soap->ip>>8) & 0xff,
       (int) soap->ip & 0xff);

但是,这始终会打印出"0.0.0.0"而不会失败。我错过了什么吗?

首先,您可以通过 soap->master 获取当前的接收套接字 fd,这个 fd 表示与客户端的连接,请确保您使用 tcp,然后您可以使用 getsockname() 获取本地 IP 地址和 getpeername 获取对等地址。

我的 gsoap 版本是 2.8.9

你正在做的是正确的,前提是客户端实际上已经连接了。根据 gSOAP 文档:

unsigned int soap::ip

客户端

数字形式的 IPv4 地址,由 soap_accept(或C++服务类accept方法)在服务器端接收,在使用WITH_IPV6时可能设置为零。

最新更新