Не удается назначить запрошенный адрес, C ++ UDP-сокеты - PullRequest
2 голосов
/ 12 сентября 2011

Следующий код от http://digitalpbk.blogspot.com/2007/10/unix-networking-sockets-udp-transmitter.html, Он отлично работает на localhost, но когда я изменяю его на свой ip, он выдает ошибку

bind (): не удается назначить запрошенный адрес

Я искал решение в течение нескольких часов, поэтому любая помощь была бы полезной

int main(void)
{

 struct sockaddr_in sin;
 char msg[10000];
 int ret;
 int sin_length;


 int s;

 s = socket(AF_INET, SOCK_DGRAM, 0);
 if(!s)
 {
  perror("socket()");
  return 0;
 }
 sin.sin_family = AF_INET;
 sin.sin_port = htons(65000);
 sin.sin_addr.s_addr = inet_addr("24.212.11.211"); // ---------------- This line ----------------
 if(bind(s, (struct sockaddr *)&sin, sizeof(sin)))
 {
  perror("bind()");
  return 1;
 }


 do  // I think the following might be a problem
 {
  sin_length = sizeof(sin);
  ret = recvfrom(s, msg, 10000, 0, (struct sockaddr *)&sin, (socklen_t*) &sin_length);
//Waits until a message is recieved...
  printf("Message[%s:%d] : %s\n",
  inet_ntoa(sin.sin_addr), sin.sin_port,msg);
 }
 while(msg[0]!='0');

 close(s);
 return 0;
}

1 Ответ

3 голосов
/ 12 сентября 2011

Скорее всего, вы меняете IP-адрес, которым вас видят люди, а не IP-адрес, которым вы себя видите. (Предполагая, что окна соответствуют параметрам, которые принимают функции). Зайдите в Пуск -> Панель управления -> (Сеть и Интернет ->) сетевое соединение / измените настройки сетевого адаптера, затем щелкните правой кнопкой мыши на сетевом адаптере и выберите статус, посмотрите IP-адрес, это тот, который вы должны использовать в своем коде. Если вы не хотите беспокоиться об этом, вы всегда можете использовать адрес BIND TO ALL THE THINGS, 0.0.0.0.

...