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

2023-11-25

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

服务器代码

#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;
}

简而言之,“没有到主机的路由”意味着客户端的路由表中没有服务器 IP 地址的路由。您能够 ping 服务器的 IP 地址吗?很可能您不应该能够,并且 ping 应该可以说服务器无法访问。如果是这样,那么此错误与您的程序无关,您可能遇到了连接问题。

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

连接错误:“没有到主机的路由” 的相关文章

  • 如何将 protobuf-net 与不可变值类型一起使用?

    假设我有一个像这样的不可变值类型 Serializable DataContract public struct MyValueType ISerializable private readonly int x private readon
  • 在 C 中匹配二进制模式

    我目前正在开发一个 C 程序 需要解析一些定制的数据结构 幸运的是我知道它们是如何构造的 但是我不确定如何在 C 中实现我的解析器 每个结构的长度都是 32 位 并且每个结构都可以通过其二进制签名来识别 举个例子 有两个我感兴趣的特定结构
  • 为什么 Google 测试会出现段错误?

    我是 Google Test 的新手 正在尝试提供的示例 我的问题是 当我引入失败并设置GTEST BREAK ON FAILURE 1 或使用命令行选项 GTest 将出现段错误 我正在考虑这个例子 https code google c
  • 回发后刷新时提示确认表单重新提交。我做错了什么?

    我有一个以空白 默认状态启动的仪表板 我让用户能够将保存的状态加载到仪表板中 当他们单击 应用 按钮时 我运行以下代码 function CloseAndSave var radUpload find radUpload1ID var in
  • 在 Visual Studio 2010 中从 Fortran 调用 C++ 函数

    我想从 Fortran 调用 C 函数 为此 我在 Visual Studio 2010 中创建了一个 FORTRAN 项目 之后 我将一个 Cpp 项目添加到该 FORTRAN 项目中 当我要构建程序时出现以下错误 Error 1 unr
  • qdbusxml2cpp 未知类型

    在使用 qdbusxml2cpp 程序将以下 xml 转换为 Qt 类时 我收到此错误 qdbusxml2cpp c ObjectManager a ObjectManager ObjectManager cpp xml object ma
  • DbContext 和 ObjectContext 有什么区别

    From MSDN 表示工作单元和存储库模式的组合 使您能够查询数据库并将更改分组在一起 然后将这些更改作为一个单元写回存储 DbContext在概念上类似于ObjectContext 我虽然DbContext只处理与数据库的连接以及针对数
  • x86-64 AMD 上 CALL 指令的操作数生成

    以下是示例程序 objdump 的输出 080483b4
  • Qt - ubuntu中的串口名称

    我在 Ubuntu 上查找串行端口名称时遇到问题 如您所知 为了在 Windows 上读取串口 我们可以使用以下代码 serial gt setPortName com3 但是当我在 Ubuntu 上编译这段代码时 我无法使用这段代码 se
  • 为什么 std::strstream 被弃用?

    我最近发现std strstream已被弃用 取而代之的是std stringstream 我已经有一段时间没有使用它了 但它做了我当时需要做的事情 所以很惊讶听到它的弃用 我的问题是为什么做出这个决定 有什么好处std stringstr
  • CMake 无法确定目标的链接器语言

    首先 我查看了this https stackoverflow com questions 11801186 cmake unable to determine linker language with c发帖并找不到解决我的问题的方法 我
  • AES 128 CBC 蒙特卡罗测试

    我正在 AES 128 CBC 上执行 MCT 如中所述http csrc nist gov groups STM cavp documents aes AESAVS pdf http csrc nist gov groups STM ca
  • 如何设置 log4net 每天将我的文件记录到不同的文件夹中?

    我想将每天的所有日志保存在名为 YYYYMMdd 的文件夹中 log4net 应该根据系统日期时间处理创建新文件夹 我如何设置它 我想将一天中的所有日志保存到 n 个 1MB 的文件中 我不想重写旧文件 但想真正拥有一天中的所有日志 我该如
  • 如何在非控制台应用程序中查看 cout 输出?

    输出到调试窗口似乎相当繁琐 我在哪里可以找到cout如果我正在编写非控制台信息 则输出 Like double i a b cout lt lt b lt lt endl I want to check out whether b is z
  • 按 Esc 按键关闭 Ajax Modal 弹出窗口

    我已经使用 Ajax 显示了一个面板弹出窗口 我要做的是当用户按 Esc 键时关闭该窗口 这可能吗 如果有人知道这一点或以前做过这一点 请帮助我 Thanks 通过以下链接 您可以通过按退出按钮轻松关闭窗口 http www codepro
  • 如果没有抽象成员,基类是否应该标记为抽象?

    如果一个类没有抽象成员 可以将其标记为抽象吗 即使没有实际理由直接实例化它 除了单元测试 是的 将不应该实例化的基类显式标记为抽象是合理且有益的 即使在没有抽象方法的情况下也是如此 它强制执行通用准则来使非叶类抽象 它阻止其他程序员创建该类
  • C++ 条件编译

    我有以下代码片段 ifdef DO LOG define log p record p else define log p endif void record char data 现在如果我打电话log hello world 在我的代码中
  • WebSocket安全连接自签名证书

    目标是一个与用户电脑上安装的 C 应用程序交换信息的 Web 应用程序 客户端应用程序是 websocket 服务器 浏览器是 websocket 客户端 最后 用户浏览器中的 websocket 客户端通过 Angular 持久创建 并且
  • Oracle Data Provider for .NET 不支持 Oracle 19.0.48.0.0

    我们刚刚升级到 Oracle 19c 19 3 0 所有应用程序都停止工作并出现以下错误消息 Oracle Data Provider for NET 不支持 Oracle 19 0 48 0 0 我将 Oracle ManagedData
  • 当从finally中抛出异常时,Catch块不会被评估

    出现这个问题的原因是之前在 NET 4 0 中运行的代码在 NET 4 5 中因未处理的异常而失败 部分原因是 try finallys 如果您想了解详细信息 请阅读更多内容微软连接 https connect microsoft com

随机推荐

  • Spring安全Java配置

    我正在尝试使用 JavaConfig 而不是 Spring Security 的 XML 配置 我想用 PreAuthorization用于声明访问权限 我的 Spring 安全配置如下所示 Configuration EnableWebS
  • 在 Django 管理中编辑组对象时将用户对象分配给组

    在用户对象 编辑用户 的默认 Django 管理视图中 可以编辑用户的组成员身份 如果我也想反过来怎么办 IE 在群组编辑页面中 可以选择属于正在编辑的群组的用户 正如我所看到的 Django 没有从 Group 到 User 对象的 Ma
  • 将外键作为主键可以吗?

    我有两张桌子 用户 用户名 密码 个人资料 个人资料 ID 性别 出生日期 目前我正在使用这种方法 每个配置文件记录都有一个名为 userId 的字段 如下所示外键它链接到用户表 当用户注册时 会自动创建他的个人资料记录 我对我朋友的建议感
  • Symfony2 中的路由:可选参数 en 四个 url 用于一个路由

    在我的 Symfony2 应用程序中 我希望通过一条路由可以实现四个 url 很多其他的东西 报告 20 负数 很多其他的东西 报告 40 正数 很多其他的东西 报告 无号码 很多其他的东西 报告 没有数字 也没有 我的路线目前如下所示 r
  • WPF ListView 始终显示完整项目

    我有一个带有多个 ListView 控件的应用程序 其中要求 ListView 中的项目必须完全可见 列表中永远不应该显示部分 ListViewItem 如果用户在最终显示部分项目的位置释放 ScrollViewer 则列表应 捕捉 并自行
  • 如何使用 Apple SDK 以编程方式检测并连接到 Wifi 网络

    我想知道如何以编程方式检测并连接到 Wifi 网络 就像 Apple Store 中的 WifiFoFum 应用程序一样 该应用程序已获得批准并最近更新 因此必须有合法的方式来执行此操作 如果有人知道任何方法 请发布一个代码片段 即使它是一
  • CustomValidator ServerValidate 方法不触发

    我已经放了一个CustomValidator在我的表格上 我还没有设置它ControlToValidate财产 在其ServerValidate事件我写了以下内容 protected void CustomValidator1 Server
  • 从 ListView 中删除所选项目

    如何从列表视图中删除选定的项目 foreach ListViewItem eachItem in listView1 SelectedItems listView1 Items Remove eachItem 其中 listView1 是列
  • x86 上成功的未对齐访问的实际效果是什么?

    我总是听说未对齐的访问很糟糕 因为它们会导致运行时错误并使程序崩溃或减慢内存访问速度 然而 我找不到任何关于它们会减慢速度的实际数据 假设我在 x86 上并且有一些 但未知 未对齐访问的份额 实际上可能的最严重的减速是什么 在不消除所有未对
  • 为什么 == 在比较使用相同 int 值装箱的两个对象类型变量时不起作用

    在尝试用 C 实现一个简单的单链表时 我注意到 在比较用 int 值装箱的两个对象类型变量时不起作用 但是 Equals works 想检查一下为什么会这样 下面的代码片段是通用对象类型数据属性 public class Node
  • 对 PySpark DataFrame 进行分组后如何应用描述函数?

    我想找到最干净的方法来应用describe函数到分组的 DataFrame 这个问题也可以扩展到将任何 DF 函数应用于分组的 DF 我测试了分组聚合 Pandas UDF 但没有成功 总有一种方法可以通过将每个统计数据传递到agg功能 但
  • 使用 QWebChannel 时未定义的属性和返回类型

    基于QT QWebEnginePage setWebChannel 传输对象 and Qt 无法从 javascript 调用共享对象方法 属性我尝试制作一个小演示来测试功能 请参阅下面的基本测试代码 我的问题是 在新 QWebChanne
  • in_array 与 strpos 在 php 中的性能对比

    我通过 Windows 身份验证登录用户 然后将该用户的权限存储在会话变量中 我在数据库中使用分隔权限存储方法 即 rights retrieved from database read edit delete admin 所以我的问题是我
  • 获取集合的所有子集

    我正在尝试创建一个返回集合的所有子集的方法 例如 如果我有集合10 20 30我想得到以下输出 return new List
  • 如何将高度超过视口的固定div粘贴到body上

    我知道div的定位 固定 绝对和相对 我可以将一个固定的 div 附加到 body 上 以便在滚动 body 时它会粘在相同的位置 我在这里问一个稍微不同的问题 我有一个侧边栏 其高度超过视口的高度 我希望它固定在主体上 滚动 body 时
  • 子串索引范围

    Code public class Test public static void main String args String str University System out println str substring 4 7 Ou
  • 直接从 Java 调用 GWT RPC 服务

    有没有一种简单的方法可以直接从 Java 代码调用 GWT RPC 服务端点 我的意思是真正的 Java 代码 而不是编译成 javascript 的 Java 代码 我问这个问题是因为我们想要针对 GWT RPC 接口运行性能基准测试 压
  • WCF 服务未反序列化枚举值

    我构建了一个 WCF 服务 其中有一个部分如下所示 ServiceContract public class Service OperationContract public SomethingElse Method Code a para
  • FlatList 组件生命周期方法 ScrollToIndex ScrollToEnd 等

    我正在使用新的FlatList成分并想利用ScrollToIndex or ScrollToEnd 在生命周期方法中 例如componentDidMount 我有一个包含 100 个项目的数组 我不想从第一个项目开始渲染 而是从一开始就开始
  • 连接错误:“没有到主机的路由”

    我正在编写一个基于 AX 25 协议的服务器 客户端 C 程序 服务器创建套接字 绑定成功并侦听即将到来的连接 客户端在不同的线程中运行 但连接失败 并显示 没有到主机的路由 服务器代码 include