Как сохранить адрес и порт сервера в строковой переменной

#c #sockets #serversocket

#c #сокеты #serversocket

Вопрос:

Я создаю сокет клиент / сервер, и мне нужно получить IP-адрес сервера сокетов, используя функцию sockaddr_in getsocketname() . Однако я не уверен, как это сделать, поскольку я не могу сделать что-то вроде

 struct sockaddr_in servAddr;
int IP = servAddr.getsockname(sock, (struct sockaddr *) %servAddr,sizeof(servAddr));
 

Комментарии:

1. Возможно, вы могли бы добавить некоторые детали, например, какая ОС и компилятор задействованы? Кроме того, было бы полезно, если бы предоставленный код был более полным; например, компилируемая программа включает main() и т. Д.

2. В C у структур не может быть методов-членов. Функции нет getsocketname() . Вы имеете в виду getsockname() ?

Ответ №1:

Я считаю, что getsockname() используется на стороне клиента, а не сервера, и только после успешного установления соединения с использованием сокета с определенным вами сервером.

Чтобы объяснить, возможный поток для подключения клиента к серверу:

  1. Создайте переменную socketfd, например, ‘sock’ в вашем случае
  2. Откройте переменную socketfd с помощью вызова socket(…)
  3. Создайте свою собственную переменную для хранения сведений о сервере, скажем:
     struct sockaddr_in serverAddr;

    serverAddr.sin_family = AF_INET;

    serverAddr.sin_addr.s_addr = inet_addr("0.0.0.0"); // replace with actual server IP

    serverAddr.sin_port = htons(80); // replace with actual port
 
  1. Подключите sockfd к серверу, указанному с помощью serverAddr, используя вызов connect(…)
  2. Получите IP-адрес и порт на стороне клиента для этого соединения, используя вызов getsockname(…)
     getsockname(socketfd, (struct sockaddr *) amp;clientAddr, sizeof(clientAddr));
    
    char buffer[INET_ADDRSTRLEN]; // stores the client side IP address

    inet_ntop(AF_INET, amp;clientAddr.sin_addr, buffer, sizeof(buffer));

    int port = (int) ntohs(clientAddr.sin_port); // stores the client side port
    
    printf("IP address: %sn", buffer);

    printf("Port: %dn", port);