TCP recvfrom () не хранит ‘from’

Я делаю серверную программу с использованием TCP и хочу получить IP-адрес отправителя только что полученного сообщения. Вот мой код:

case FD_READ:
{    //Incoming data; get ready to receive
char buffer[DEFAULT_BUFLEN];
int bytes_received;
memset(buffer, '\0', sizeof(buffer));

struct sockaddr_in recvIn;
int recv_length = sizeof(struct sockaddr);

memset((void *)&recvIn, '\0', recv_length);

bytes_received = recvfrom(wParam, buffer, DEFAULT_BUFLEN, 0, (struct sockaddr *)&recvIn, &recv_length);
cout << inet_ntoa(recvIn.sin_addr) << "\n";

break;
}

Поэтому я использую сообщения Windows, чтобы узнать, должен ли я проверять наличие пакетов. Получение данных работает, я могу прочитать это и все. Но переменная recvIn не изменяется с помощью recvfrom. Поэтому, когда я делаю кут << inet_ntoa (recvIn.sin_addr) << «\ n» пишет «0.0.0.0». Я погуглил эту проблему, и большинство других людей, у которых была эта проблема, забыли инициализировать recv_length. Но я почти уверен, что сделал это правильно здесь. Кто-нибудь может увидеть, что я делаю не так? Или мне нужно что-то изменить с отправляемыми данными? Возможно, входящие данные не имеют IP-адреса. В этом я очень сомневаюсь, потому что я использую TCP.

Спасибо за ваше время, я надеюсь, я смогу решить эту проблему!

1

Решение

TCP — это протокол, ориентированный на соединение. from а также fromlen предназначены для использования с протоколами без установления соединения, такими как UDP. Согласно документация, recvfrom игнорируемых from а также fromlen для соединительных розеток.

5

Другие решения

Для подключенного сокета TCP вы должны использовать getpeername () получить адрес удаленного сокета.

3

По вопросам рекламы [email protected]