UDP 服务器出现分段错误

2024-01-07

我使用 UDP 编写了以下回显服务器,但我不知道为什么它在 sendto 函数中给我分段错误,它接收良好,但在将数据发送回客户端时出现问题。我已经尝试找到问题几个小时了,但一无所获。有人可以指出错误或我可能做错了什么吗? 谢谢

#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define true 1
#define false 0

int main(int argc,char **args)
{
    int BUF_LENGTH=101;
    int port_no=1800;
    struct sockaddr_in serv_addr,rmt_addr;
    //rmt_addr=malloc(sizeof(struct sockaddr_in));
    char *buffer=malloc(BUF_LENGTH);
    int byte_recv=0;
    int rmt_length=0;

    int sock_id;
    sock_id=socket(AF_INET,SOCK_DGRAM,0);

    if(sock_id<0)
    {
        printf("Error creating socket : %d",sock_id);
        return -1;
    }

    serv_addr.sin_family=AF_INET;
    serv_addr.sin_port=htons(port_no);
    serv_addr.sin_addr.s_addr=inet_addr("127.0.0.1");

    bind(sock_id,(struct sockaddr*)&serv_addr,sizeof(serv_addr));

    printf("Created\n");
    while(true)
    {
        printf("Waiting\n");
        byte_recv=recvfrom(sock_id,buffer,BUF_LENGTH,0,(struct sockaddr*)&rmt_addr,&rmt_length);

        printf("%s\n",buffer);
        if(byte_recv<0)
        {
            printf("Error receiving: %d",byte_recv);
            error("recvfrom");
            return -2;
        }

        printf("%d:%d %s\n",rmt_length,rmt_addr.sin_port,inet_ntoa(rmt_addr.sin_addr));

        byte_recv=sendto(sock_id,buffer,BUF_LENGTH,0,(struct sockaddr*)&rmt_addr,rmt_length); //The segmentation fault comes here

        printf("Bytes sent: %d \n",byte_recv);
        if(byte_recv<0)
            error("sendto");
    }

    free(buffer);
    return 0;
}

这些行:

error("recvfrom");

error("sendto");

不要做你认为他们做的事。你可能想说perror http://linux.die.net/man/3/perror.

此外,您没有初始化rmt_length正确。尝试这个:

int rmt_length=sizeof(rmt_addr);

最后,您回显的字节数比服务器接收到的字节数多。尝试这个:

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

UDP 服务器出现分段错误 的相关文章

  • 如何从 Linux 内核模块获取使用计数?

    我对正在开发的内核模块的使用计数有疑问 我想打印它以进行调试 如何从模块代码中获取它 有问题的内核版本 Linux 2 6 32 module refcount http lxr linux no linux v2 6 34 1 inclu
  • 使用 select 从套接字和标准输入读取

    我正在编写一个基于 ncurses 的聊天程序 起初 我只编写了网络内容 没有 ncurses 一切都工作正常 但添加图形后我无法让客户端应用程序正常工作 主要问题是同时从标准输入和套接字读取 在无 ncurses 的版本中 我使用了 pt
  • 错误:命令“c++”失败,退出状态为 1

    所以我尝试按照以下说明安装 Pyv8https andrewwilkinson wordpress com 2012 01 23 integrating python and javascript with pyv8 https andre
  • 如何在 Linux 中重新添加 unicode 字节顺序标记?

    我有一个相当大的 SQL 文件 它以 FFFE 的字节顺序标记开头 我使用 unicode 感知的 linux 分割工具将此文件分割成 100 000 行块 但是当将这些传递回窗口时 它确实not与第一个部分以外的任何部分一样 只是它具有
  • C++:Linux平台上的线程同步场景

    我正在为 Linux 平台实现多线程 C 程序 其中我需要类似于 WaitForMultipleObjects 的功能 在搜索解决方案时 我发现有一些文章描述了如何在 Linux 中实现 WaitForMultipleObjects 功能
  • 运行此处编译的 C 程序会导致在另一台服务器上找不到 GLIBC 库错误 - 是我的错还是他们的错?

    此处编译的 C 程序在我们的 Ubuntu 服务器上运行良好 但是当其他人尝试在他们的特定 Linux 服务器上运行它时 他们会收到以下错误 myprog install lib tls libc so 6 version GLIBC 2
  • 将node.js +expressjs应用程序的NODE_ENV设置为ubuntu下的守护进程

    我按照这些说明让守护进程正常工作 http kevin vanzonneveld net techblog article run nodejs as a service on ubuntu karmic http kevin vanzon
  • ubuntu 的 CSS 更少(并且自动编译)? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我尝试过 simples 但现在 l
  • 如何在 Linux/OS X 上温和地终止 Firefox 进程

    我正在使用 Firefox 进行一些自动化操作 尽管我可以从 shell 打开 Firefox 窗口 但我无法正确终止它 如果我kill火狐进程与kill 3 or kill 2当我下次打开新的 Firefox 窗口时 命令会询问我是否要在
  • 完整的 C++ i18n gettext()“hello world”示例

    我正在寻找完整的 i18ngettext 你好世界的例子 我已经开始了一个基于的脚本使用 GNU gettext 的本机语言支持教程 https web archive org web 20130330233819 http oriya s
  • 如何在特定的Java版本上运行应用程序?

    如何运行具有特定 Java 版本的应用程序 我安装了三个 Java 版本 myuser mysystem sudo update alternatives config java There are 3 choices for the al
  • 为什么 Kademlia 使用 UDP?

    为什么Kademlia 分布式哈希表 http en wikipedia org wiki Kademlia使用 UDP 作为其网络传输协议 即使它不可靠 主要原因是您快速查询了许多以前从未建立过联系并且可能在查找过程中永远不会再看到的节点
  • 如何使用 go1.6.2 构建 linux 32 位

    有没有任何组合GOARCH and GOOS我可以设置哪些值来构建 ELF 32 位二进制文 件 GOOS linux and GOARCH 386 更多示例 架构 32 bit gt GOARCH 386 64 bit gt GOARCH
  • 如何读取 UDP 连接直至超时?

    我需要读取 UDP 流量 直到超时 我可以通过在 UDPConn 上调用 SetDeadline 并循环直到出现 I O 超时错误来做到这一点 但这看起来很黑客 基于错误条件的流量控制 下面的代码片段看起来更正确 但并没有终止 在生产中 这
  • 错误号:11,资源暂时不可用

    我正在使用 c 套接字来实现可靠的 UDP 协议 我正在使用以下代码在等待确认的套接字上设置超时 我不确定为什么会收到 errno 11 资源暂时不可用 set timer for recv socket struct timeval tv
  • 在嵌入式系统上将内核控制台发送到哪里?

    我正在开发一个嵌入式系统 该系统当前通过串行端口 1 上的控制台输出启动 Linux 使用启动加载程序中的控制台启动参数 然而 最终我们将使用这个串行端口 内核控制台输出的最佳解决方案是什么 dev null 能否以某种方式将其放在 pty
  • 亚马逊 Linux - 安装 openjdk-debuginfo?

    我试图使用jstack在 ec2 实例上amazon linux 所以我安装了openjdk devel包裹 sudo yum install java 1 7 0 openjdk devel x86 64 但是 jstack 引发了异常j
  • 由于 abi::cxx11 符号导致的链接问题?

    我们最近收到一份报告 因为GCC 5 1 libstdc 和双 ABI http gcc gnu org onlinedocs libstdc manual using dual abi html 它似乎Clang 不知道 GCC 内联名称
  • 如何用 C 语言通过 HTTP 协议发送图像?

    我是一名正在做网络服务器练习的学生 我需要一些帮助 我的网络服务器在文本页面上运行良好 但是每当浏览器发送一个 GET img jpg HTTP 1 1请求 我不知道如何处理 我听说 HTTP 协议是基于文本的 那么如何在 HTTP 响应中
  • Java时区混乱

    我正在运行 Tomcat 应用程序 并且需要显示一些时间值 不幸的是 时间快到了 还有一个小时的休息时间 我调查了一下 发现我的默认时区被设置为 sun util calendar ZoneInfo id GMT 08 00 offset

随机推荐

  • CocoaAsyncSocket 的读写委托不触发&代码组织

    我正在尝试使用 cocoaasyncsocket 库附带的 echo 服务器示例的修改版本执行以下操作 1 打开与充当服务器的 python 脚本的连接2 发送数据 有效 但委托不触发3 接收返回数据 委托不会触发4 断开连接 没有断开连接
  • .NET 4 上的 WCF 流式文件传输

    我需要一个关于 WCF 流式文件传输的好例子 我找到了几个并尝试了它们 但是这些帖子很旧 而且我正在 net 4 和 IIS 7 上工作 所以存在一些问题 你能给我一个很好的 最新的例子吗 以下答案详细介绍了使用一些技术将二进制数据发布到静
  • 与后端同步集合更改

    我使用 Backbone js 并且有一组模型 该集合被检索并显示在前端 在前端 我希望用户删除新模型并将其添加到集合中 当用户完成并单击 保存 时 我希望更新整个集合 这意味着当单击 保存 时 集合会同步 以某种方式 添加的模型将被保存
  • Windows 10 中 NVM 的访问被拒绝问题

    当我在 Windows 10 中使用 nvm v 命令时 我收到 访问被拒绝 的消息 我在这里遇到了类似的问题NVM 被拒绝访问 https stackoverflow com questions 48762782 nvm is acces
  • 在 Elixir 单元测试中导入测试代码

    我正在编写一些与 SSH 交互的 Elixir 代码的测试 在我的测试中 我想启动一个可以运行代码的 SSH 服务器 我更愿意将此代码存储在测试目录中它自己的文件中 并通过各种不同的测试导入它 但我还没能让这个工作得很好 我尝试过创建一个t
  • C# 替换文件中的字符串

    替换 HTML 文件内容的一部分时 String Replace 似乎无法正常工作 例如 String Replace 替换 with blah blah blah html gt 请注意 第二个 HTML 结束标记未正确关闭 因此当用户在
  • 强制所有类在多级继承层次结构中实现/重写“纯虚拟”方法

    在C 中为什么pure virtual方法强制其强制覆盖only到它的直接子级 用于对象创建 但不到孙子级等等 struct B virtual void foo 0 struct D B virtual void foo struct D
  • 数据库磁盘映像格式错误或文件已加密或不是数据库

    我需要将没有 Root 的手机上的数据库复制到pad上 所以我也采用了像其他人一样的方法 首先将 data data databases test db复制到 sdcard 然后我使用在我的电脑或我朋友的电脑上使用adb shell sql
  • 反转 Jenkins 的一次一次哈希

    我将如何获取与返回的哈希匹配的任何可能的字符串值 我不想获取所使用的确切密钥 只想获取传递给函数时将返回未知密钥的相同哈希值的任何密钥 uint32 t jenkins one at a time hash const uint8 t ke
  • #warning 和 #error 作为宏

    有没有办法让宏在编译时强制出现警告和错误 我目前有这样的事情 if defined clang define PRAGMA x Pragma x elif defined GNUC define PRAGMA x Pragma x elif
  • 渲染动作渲染部分

    据我了解 两者之间有很大区别Html RenderPartial包含在 ASP NET MVC 版本和HTML RenderAction in the Microsoft Web Mvc ViewExtensions包含在 MVC 期货中
  • React 动态设置状态属性

    我正在使用 React 并且有一些方法可以单独设置组件的状态 我有以下方法 setLineColor value this setState stroke value gt this props data this getStyleData
  • 如何在 Xcode 4 上创建新的“模板”类别并在那里使用我自己的文件模板?

    我想开始为 iOS 应用程序使用我自己的模板 我不想要任何重大的改变 但更简单的事情 比如 添加 删除一些样板代码 添加一些pragma mark部分 对每个文件硬编码我公司的名称和一些注释 改变缩进 等等等等等等 我们的想法是 我们将在创
  • 在 Java 中列出文件(按修改日期排序)的最佳方法?

    我想获取目录中的文件列表 但我想对其进行排序 以使最旧的文件排在第一位 我的解决方案是调用 File listFiles 并根据 File lastModified 重新使用列表 但我想知道是否有更好的方法 编辑 按照建议 我当前的解决方案
  • 组织毡尖笔:使用 JS 通过相邻项目的相似性优化 2D 网格中项目的排列 [更新]

    UPD 该问题已更新具体细节和代码 请参见下文 警告 这个问题是关于优化矩阵中项目的排列 这不是比较颜色 最初 我决定提供有关我的问题的背景会有帮助 我现在对这个决定感到后悔 因为结果恰恰相反 关于颜色的无关紧要的讨论太多 而几乎没有关于实
  • TS2538 类型“未定义”不能用作索引类型。当检查分配给变量时

    我收到 TS 错误 TypeScript 错误 类型 未定义 不能用作索引类型 TS2538 对于这个简单的函数 根据提供的索引从数组获取对象 const myArr Array name John name Tom function ge
  • 如何忽略asp.net表单中的url路由

    我正在使用 NET 3 5 SP1 框架 并且在我的应用程序中实现了 URL 路由 我收到 JavaScript 错误 Error ASP NET Ajax client side framework failed to load Reso
  • 如何改变GtkTextView的背景颜色?

    如何改变GtkTextView的背景颜色 我尝试使用普通的小部件设置 bg 功能 但 gtk 只是更改 GtkText 视图的边框颜色 另外 有人可以用简单的例子向我解释一下如何更改 GtkTextView 中的文本颜色 字体 文本大小 G
  • 在 SQL Server 2008 R2 中获取时区

    如何获取 Microsoft SQL Server 2008R2 中的时区列表 在 SQL Server 2008 中使用时区数据 http blogs msdn com b sqlprogrammability archive 2008
  • UDP 服务器出现分段错误

    我使用 UDP 编写了以下回显服务器 但我不知道为什么它在 sendto 函数中给我分段错误 它接收良好 但在将数据发送回客户端时出现问题 我已经尝试找到问题几个小时了 但一无所获 有人可以指出错误或我可能做错了什么吗 谢谢 include