ntohl используется в sin_port и получает отрицательные числа - PullRequest
4 голосов
/ 09 марта 2012

Я пытаюсь напечатать клиентский порт в моем серверном приложении, которое находится в C. Но я получаю отрицательные числа порта клиента, что странное поведение: - / У кого-нибудь есть идея, в чем может быть проблема?
Часть моего кода, которая вызывает проблему:

struct sockaddr_in client_address;
int chosenPort = (int) ntohl(client_address.sin_port);
pritf("Client port is %d, chosenPort");

Я получаю порт как -2121400320.

Ответы [ 2 ]

7 голосов
/ 09 марта 2012

Вместо этого используйте ntohs() - sin_port - это 16-битное значение.

0 голосов
/ 09 марта 2012

Прежде всего вы должны использовать функцию ntohs вместо ntohl. ntohs () возвращает 16-битный номер порта, а ntohl возвращает 32-битный IP-адрес

Теперь вы можете получить данные клиента, используя getpeername ()

Синтаксис:

#include <sys/socket.h>
struct sockaddr_in client_address;
int getpeername(int sockfd, struct sockaddr *client, socklen_t *addrlen);

Вы можете найти более подробную информацию, используя команду man ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...