当前位置: 技术问答>linux和unix
急!网络编程,connect()无法连接,返回 errno 为 101 。该怎么解决?谢谢
来源: 互联网 发布时间:2015-12-08
本文导语: 客户端连接用代码部分: for(;;) { bzero(&server_addr,sizeof(server_addr)); server_addr.sin_family=AF_INET; server_addr.sin_addr.s_addr = inet_addr(host_name); server_addr.sin_port=htons(server_port); printf("nserver ip= %s...
客户端连接用代码部分:
for(;;)
{
bzero(&server_addr,sizeof(server_addr));
server_addr.sin_family=AF_INET;
server_addr.sin_addr.s_addr = inet_addr(host_name);
server_addr.sin_port=htons(server_port);
printf("nserver ip= %s ,port = %d", inet_ntoa(server_addr.sin_addr),server_addr.sin_port);
if((socket_fd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
printf("nError openning socket");
close(socket_fd);
continue;
}
fcntl(socket_fd,F_SETFD,O_NONBLOCK);
if(connect(socket_fd,(struct sockaddr *)&server_addr,sizeof(struct sockaddr))==-1)
{
printf("nError connect ... errno = %d",errno);
close(socket_fd);
continue;
}
else
{
break;
}
----------
启动后在超级终端输出信息:
server ip= 192.168.3.18 ,port = 16415
Error connect ... errno = 101
errno 101 的含义:
#define ENETUNREACH 101 /* Network is unreachable */
硬件没有问题,ARM9目标板通过交叉网线直接与PC相连,代码是通过网络下载到目标板的,而且右下角的状态栏也显示本地连接 已连接上,请问错误的原因是什么?怎么解决?PC在WINDOWS下开启服务监听(IP 192.168.3.18 端口 8000)谢谢
for(;;)
{
bzero(&server_addr,sizeof(server_addr));
server_addr.sin_family=AF_INET;
server_addr.sin_addr.s_addr = inet_addr(host_name);
server_addr.sin_port=htons(server_port);
printf("nserver ip= %s ,port = %d", inet_ntoa(server_addr.sin_addr),server_addr.sin_port);
if((socket_fd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
printf("nError openning socket");
close(socket_fd);
continue;
}
fcntl(socket_fd,F_SETFD,O_NONBLOCK);
if(connect(socket_fd,(struct sockaddr *)&server_addr,sizeof(struct sockaddr))==-1)
{
printf("nError connect ... errno = %d",errno);
close(socket_fd);
continue;
}
else
{
break;
}
----------
启动后在超级终端输出信息:
server ip= 192.168.3.18 ,port = 16415
Error connect ... errno = 101
errno 101 的含义:
#define ENETUNREACH 101 /* Network is unreachable */
硬件没有问题,ARM9目标板通过交叉网线直接与PC相连,代码是通过网络下载到目标板的,而且右下角的状态栏也显示本地连接 已连接上,请问错误的原因是什么?怎么解决?PC在WINDOWS下开启服务监听(IP 192.168.3.18 端口 8000)谢谢
|
int main(int argc,char * argv[])
{
server_addr.sin_addr.s_addr = inet_addr(argv[1]);
}
---------------------------
a.out 192.168.0.1
{
server_addr.sin_addr.s_addr = inet_addr(argv[1]);
}
---------------------------
a.out 192.168.0.1
|
Network is unreachable :网卡有问题。
|
1。
if((socket_fd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
printf("nError openning socket");
close(socket_fd);
continue;
此处的continue没有必要,失败了就可以中止了,不需要一直试吧
2。
fcntl(socket_fd,F_SETFD,O_NONBLOCK);
此处直接设置文件属性,没有先获取之前的属性,就直接覆盖了以前的,不太妥当。
3。
if(connect(socket_fd,(struct sockaddr *)&server_addr,sizeof(struct sockaddr))==-1)
第3个参数,如果我没记错的话,应该是sockaddr_in类型的sizeof吧。
if((socket_fd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
printf("nError openning socket");
close(socket_fd);
continue;
此处的continue没有必要,失败了就可以中止了,不需要一直试吧
2。
fcntl(socket_fd,F_SETFD,O_NONBLOCK);
此处直接设置文件属性,没有先获取之前的属性,就直接覆盖了以前的,不太妥当。
3。
if(connect(socket_fd,(struct sockaddr *)&server_addr,sizeof(struct sockaddr))==-1)
第3个参数,如果我没记错的话,应该是sockaddr_in类型的sizeof吧。
|
关注