我正在编写 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
时可能设置为零。