Can't assign requested address, C++ UDP socket

2019-07-20 23:32发布

问题:

The following code is from http://digitalpbk.blogspot.com/2007/10/unix-networking-sockets-udp-transmitter.html, It runs fine on localhost but when I change it to my ip it gives the error

bind(): Can't assign requested address

I have been searching for a solution for a few hours so any help would be great

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:

Most likely you're changing it to the IP that people see you as, not the IP you see yourself as. (Assuming windows from the parameters the functions take) Go to start -> control panel -> (Network & Internet ->) network connection/change network adapter settings and then right click on your network adapter and select status, look at IP address, that is the one you should be using in your code. If you don't want to worry about that, you can always use the BIND TO ALL THE THINGS address, 0.0.0.0.