连接错误:“没有路由到主机”

我正在写一个基于AX.25协议的服务器/客户端C程序。 服务器创build套接字,成功绑定并监听即将到来的连接。 客户端运行在不同的线程,但连接失败“没有路由到主机”

服务器代码

#include <sys/socket.h> #include <netax25/ax25.h> #include <netax25/axlib.h> #include <netax25/axconfig.h> #include <stdio.h> #include <arpa/inet.h> #include <stdio.h> #include <string.h> #include <unistd.h> #include <signal.h> #include <syslog.h> #include <sys/types.h> #include <linux/socket.h> #include <stdlib.h> #include <sys/un.h> #include <string.h> #include <errno.h> int main(int argc,char **argv,char **envp) { int ax25_socket = -1; unsigned char buffer[512]; struct full_sockaddr_ax25 addr, axconnect ; char *port ="3";// sm0 port number:3 char *call = "OH2BNS-8";// sm0 callsign bzero((char *) &addr, sizeof(struct full_sockaddr_ax25)); addr.fsa_ax25.sax25_family = AF_AX25; addr.fsa_ax25.sax25_ndigis = 1; if (ax25_config_load_ports() == 0) { printf( "Problem with axports file"); //return -1; } char* ax25port = (char*) ax25_config_get_addr(port); ax25_aton_entry( call, addr.fsa_ax25.sax25_call.ax25_call); ax25_aton_entry( ax25port, addr.fsa_digipeater[0].ax25_call); ax25_socket = socket(AF_AX25, SOCK_SEQPACKET, 0); if (ax25_socket < -1) printf( "error in create socket"); if (bind(ax25_socket, (struct sockaddr *)&addr, sizeof(struct full_sockaddr_ax25)) < 0) { perror("bind--"); return -1; } if(listen(ax25_socket,2) != 0) { printf("cannot listen on socket!\n"); close(ax25_socket); return 0; } puts("listening"); //bzero((char *) &axconnect, sizeof(struct full_sockaddr_ax25)); int len =sizeof(struct full_sockaddr_ax25); int temp_sock_desc = accept(ax25_socket, (struct sockaddr*)&axconnect, &len); if (temp_sock_desc == -1) { printf("cannot accept client!\n"); close(ax25_socket); return 0; } return 0; } 

客户端代码

 #include <sys/socket.h> #include <netax25/ax25.h> #include <netax25/axlib.h> #include <netax25/axconfig.h> #include <stdio.h> #include <arpa/inet.h> #include <stdio.h> #include <string.h> #include <unistd.h> #include <signal.h> #include <syslog.h> #include <sys/types.h> #include <linux/socket.h> #include <stdlib.h> #include <sys/un.h> #include <string.h> #include <errno.h> int main(int argc, char *argv[]) { int ax25_socket = -1; unsigned char buffer[512]; struct full_sockaddr_ax25 axconnect ; char *port ="3";// sm0 port number:3 char *call ="OH2BNS-8";// sm0 callsign bzero((char *) &axconnect, sizeof(struct full_sockaddr_ax25)); axconnect.fsa_ax25.sax25_family = AF_AX25; axconnect.fsa_ax25.sax25_ndigis = 1; if (ax25_config_load_ports() == 0) { printf( "Problem with axports file"); //return -1; } char* ax25port = (char*) ax25_config_get_addr(port); ax25_aton_entry( call, axconnect.fsa_ax25.sax25_call.ax25_call); ax25_aton_entry( ax25port, axconnect.fsa_digipeater[0].ax25_call); ax25_socket = socket(AF_AX25, SOCK_SEQPACKET, 0); if (ax25_socket < -1) printf( "error in create socket"); if (connect(ax25_socket, (struct sockaddr *)&axconnect, sizeof(struct full_sockaddr_ax25)) != 0) { perror("--"); switch (errno) { case ECONNREFUSED: printf("*** Connection refused\r"); break; case ENETUNREACH: printf("*** No known route\r"); break; case EINTR: printf("*** Connection timed out\r"); break; default: printf("ERROR: cannot connect to AX.25 callsign\r"); break; } close(ax25_socket); } printf("Connected!!\r"); int n = write(ax25_socket,"Message!!!!",18); if(n = -1) { perror("write--"); } return 0; } 

Solutions Collecting From Web of "连接错误:“没有路由到主机”"

简单地说,“没有路由到主机”将意味着在客户端的路由表中没有服务器IP地址的路由。你能ping通服务器的IP地址吗?很可能你应该不能ping通说服务器是不可访问的,如果是这样,那么这个错误与你的程序无关,你可能会遇到连接问题。

您可以在“route -n”的输出中找到您的服务器的条目。 如果没有,那么你应该检查服务器的子网更大的前缀。 如果这也不存在,那么你应该确认你有一个默认的路由设置。

为了进一步确认,我会做以下两个测试。 首先,如果您尝试在同一个盒子上运行客户端/服务器,会发生什么? 其次,如果您尝试在两个盒子(存在于同一个子网中)和同一个LAN上运行客户端/服务器,会发生什么? 如果你没有看到这个问题,你的应用程序工作得很好,那么这应该确认你正在遇到连接问题。

我知道这是一个老问题,但我会怀疑ax25port的问题 – 应该是YOURCALL-0 ,其中YOURCALL匹配现有ax25端口的HWaddr(try /sbin/ifconfig | fgrep AX.25