Я пишу как SOAP-клиент, так и сервер, мой сервер находится на C ++ с использованием gSOAP 2.8.15, а мой клиент на Java с использованием JAX-WS 2.0.
Когда я подключаюсь от моего клиента к моему серверу, я хотел бы иметь возможность видеть некоторую информацию о соединении, в частности, каков IP-адрес клиента, подключенного к моему серверу. Я провел некоторое исследование и увидел, что можно получить эту информацию из gSOAP, используя что-то вроде следующего:
printf ("starting session with %d.%d.%d.%d\n",
(int) (soap->ip>>24) & 0xff,
(int) (soap->ip>>16) & 0xff,
(int) (soap->ip>>8) & 0xff,
(int) soap->ip & 0xff);
Тем не менее, это всегда печатает «0.0.0.0» в обязательном порядке. Я что-то пропустил?
Во-первых, вы можете получить текущий сокет получения fd с помощью soap-> master, это означает, что при соединении с клиентом , убедитесь, что мыло использует tcp, затем вы можете использовать getsockname (), чтобы получить локальный IP-адрес, а getpeername — получить адрес партнера.
моя версия gsoap 2.8.9
То, что вы делаете, правильно, при условии, что клиент действительно подключился. В соответствии с документы gSOAP:
unsigned int soap::ip
IPv4-адрес в числовой форме клиента, полученный на стороне сервера
soap_accept
(или класс обслуживания C ++accept
метод), возможно, установить в ноль, когдаWITH_IPV6
используется.