socket编程的bind函数问题

来源:百度知道 编辑:UC知道 时间:2024/06/05 08:39:13
bzero(&socket_info.address, sizeof(socket_info.address));
socket_info.address.sin_family = AF_INET;
socket_info.address.sin_addr.s_addr = inet_addr(IP) ;
socket_info.address.sin_port = htons(PORT);
socket_info.socket_descriptor = socket(AF_INET, SOCK_DGRAM, 0);
if (socket_info.socket_descriptor == -1) {
perror ("socket call failed");
exit(errno);
}
bind_rc = bind(socket_info.socket_descriptor, (struct sockaddr *)&socket_info.address, sizeof(socket_info.address));
if (bind_rc == -1) {
perror ("bind call failed");
exit (errno);
}

#define IP "192.168.2.6"

这里的IP是我本机的IP,如果使用127.0.0.1代码也都正常。
但是如果使用比如说是局域网内的IP"192.168.2.22"
就出现错误:
bind call failed: Cannot assign requested address

请问大家我的初始化哪里有错误?
是linux下的socket。
htonl(INADDR_ANY); 是任何IP的。对我没任何意义,而且我用的UDP,不是TCP,看你等级那么高也是到处复制粘贴来回答问题的?难道都没看到我问什么吗?
我知道我错在哪里了:

服务器端程序

/******* 服务器程序 (server.c) ************/
#include
#include
#include
#include
#include
#include
#include
#include

int main(int argc, char *argv[])
{
int sockfd,new_fd;
struct sockaddr_in server_addr;
struct sockaddr_in client_addr;
int sin_size,portnumber;
char hello[]="Hello! Are You Fine?\n";

if(argc!=2)
{
fprintf(stderr,"Usage:%s portnumber\a\n",argv[0]);
exit(1);
}

if((portnumber=atoi(argv[1]))?0)
{
fprintf(stderr,"Usage:%s portnumber\a\n",argv[0]);
exit(1);
}

/* 服务器端开始建立socket描述符 */
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
fprintf(stderr,"Socket error:%s\n\a",strerror(errno));
exit(1);
}

/* 服务器端填充 sockaddr结构 */