如何使用 SOCK_DGRAM 制作双向 unix 域套接字?

2023-12-04

我正在尝试编写一个简单的 Unix 数据报服务器/客户端,但遇到了一些问题。我想要的是一个监听数据报套接字并向原始发送者发送对收到的每条消息的回复的服务器。我决定先尝试使用socat成为“服务器”并用 C 编写客户端。我像这样运行 socat:

socat UNIX-DGRAM:/tmp/test.socket,fork EXEC:echo

据我所知,这应该听/tmp/test.socket并用相同的字符串回复收到的所有内容?然后我有一个如下所示的客户端程序(为了清楚起见,删除了错误检查):

int s = socket(AF_UNIX, SOCK_DGRAM, 0);
struct sockaddr_un sa;
sa.sun_family = AF_UNIX;
strcpy(sa.sun_path, "/tmp/test.socket");

const char *data = "Testing data";
int err = sendto(s, data, strlen(data), 0, (struct sockaddr *)(&sa), sizeof(struct sockaddr_un));

printf("Sent!\n");

unsigned char *buffer = malloc(BUFFER_LENGTH);
struct sockaddr_storage recv_sa;
int recv_sa_len = 0;
int recv_len = recvfrom(s, buffer, BUFFER_LENGTH, 0, (struct sockaddr *)&recv_sa, &recv_sa_len);

for (int i = 0; i < recv_len; i++) {
    putc(buffer[i], stdout);
}
printf("\n");

它应该发送数据包(有效),接收数据包,然后将其打印出来,但程序似乎无法接收数据包。我在这里做错了什么,或者我对 Unix 套接字有根本的误解吗?谢谢!


看一下 Michael Kerrisk 的 AF_UNIX SOCK_DGRAM 客户端/服务器程序示例(client, server)发表在他的书《Linux 编程接口》第 57 章中。

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

如何使用 SOCK_DGRAM 制作双向 unix 域套接字? 的相关文章

  • 如何检查图像对象与资源中的图像对象是否相同?

    所以我试图创建一个简单的程序 只需在单击图片框中更改图片即可 我目前只使用两张图片 所以我的图片框单击事件函数的代码 看起来像这样 private void pictureBox1 Click object sender EventArgs
  • 如何使 Windows 窗体的关闭按钮不关闭窗体但使其不可见?

    该表单有一个 NotifyIcon 对象 当用户单击 关闭 按钮时 我希望表单不关闭而是变得不可见 然后 如果用户想再次查看该表单 可以双击系统托盘中的图标 如果用户想关闭表单 可以右键单击该图标并选择 关闭 有人可以告诉我如何使关闭按钮不
  • 无法使用已与其底层 RCW 分离的 COM 对象。在 oledb 中

    我收到此错误 但我不知道我做错了什么 下面的代码在backrgroundworker中 将异常详细信息复制到剪贴板 System Runtime InteropServices InvalidComObjectException 未处理 通
  • 访问私人成员[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 通过将类的私有成员转换为 void 指针 然后转换为结构来访问类的私有成员是否合适 我认为我无权修改包含我需要访问的数据成员的类 如果不道德 我
  • C# 和 Javascript SHA256 哈希的代码示例

    我有一个在服务器端运行的 C 算法 它对 Base64 编码的字符串进行哈希处理 byte salt Convert FromBase64String serverSalt Step 1 SHA256Managed sha256 new S
  • ASP.NET Core Serilog 未将属性推送到其自定义列

    我有这个设置appsettings json对于我的 Serilog 安装 Serilog MinimumLevel Information Enrich LogUserName Override Microsoft Critical Wr
  • Qt-Qlist 检查包含自定义类

    有没有办法覆盖加载自定义类的 Qt QList 的比较机制 即在 java 中你只需要重写一个比较方法 我有一个带有我的自定义类模型的 QList QList
  • 获取按下的按钮的返回值

    我有一个在特定事件中弹出的表单 它从数组中提取按钮并将标签值设置为特定值 因此 如果您要按下或单击此按钮 该函数应返回标签值 我怎样才能做到这一点 我如何知道点击了哪个按钮 此时代码返回 DialogResult 但我想从函数返回 Tag
  • 如何避免情绪低落?

    我有一个实现状态模式每个状态处理从事件队列获取的事件 根据State因此类有一个纯虚方法void handleEvent const Event 事件继承基础Event类 但每个事件都包含其可以是不同类型的数据 例如 int string
  • linux perf:如何解释和查找热点

    我尝试了linux perf https perf wiki kernel org index php Main Page今天很实用 但在解释其结果时遇到了困难 我习惯了 valgrind 的 callgrind 这当然是与基于采样的 pe
  • C++ 子字符串返回错误结果

    我有这个字符串 std string date 20121020 我正在做 std cout lt lt Date lt lt date lt lt n std cout lt lt Year lt lt date substr 0 4 l
  • 如何忽略“有符号和无符号整数表达式之间的比较”?

    谁能告诉我必须使用哪个标志才能使 gcc 忽略 有符号和无符号整数表达式之间的比较 警告消息 gcc Wno sign compare 但你确实应该修复它警告你的比较
  • 在 Visual Studio 2008 上设置预调试事件

    我想在 Visual Studio 中开始调试程序之前运行一个任务 我每次调试程序时都需要运行此任务 因此构建后事件还不够好 我查看了设置的 调试 选项卡 但没有这样的选项 有什么办法可以做到这一点吗 你唯一可以尝试的 IMO 就是尝试Co
  • Web API - 访问 DbContext 类中的 HttpContext

    在我的 C Web API 应用程序中 我添加了CreatedDate and CreatedBy所有表中的列 现在 每当在任何表中添加新记录时 我想填充这些列 为此目的我已经覆盖SaveChanges and SaveChangesAsy
  • 从库中捕获主线程 SynchronizationContext 或 Dispatcher

    我有一个 C 库 希望能够将工作发送 发布到 主 ui 线程 如果存在 该库可供以下人员使用 一个winforms应用程序 本机应用程序 带 UI 控制台应用程序 没有 UI 在库中 我想在初始化期间捕获一些东西 Synchronizati
  • 插入记录后如何从SQL Server获取Identity值

    我在数据库中添加一条记录identity价值 我想在插入后获取身份值 我不想通过存储过程来做到这一点 这是我的代码 SQLString INSERT INTO myTable SQLString Cal1 Cal2 Cal3 Cal4 SQ
  • C++ fmt 库,仅使用格式说明符格式化单个参数

    使用 C fmt 库 并给定一个裸格式说明符 有没有办法使用它来格式化单个参数 example std string str magic format 2f 1 23 current method template
  • 为什么我收到“找不到编译动态表达式所需的一种或多种类型。”?

    我有一个已更新的项目 NET 3 5 MVC v2 到 NET 4 0 MVC v3 当我尝试使用或设置时编译出现错误 ViewBag Title财产 找不到编译动态表达式所需的一种或多种类型 您是否缺少对 Microsoft CSharp
  • 如何使用 std::string 将所有出现的一个字符替换为两个字符?

    有没有一种简单的方法来替换所有出现的 in a std string with 转义 a 中的所有斜杠std string 完成此操作的最简单方法可能是boost字符串算法库 http www boost org doc libs 1 46
  • 恢复上传文件控制

    我确实阅读了以下帖子 C 暂停 恢复上传 https stackoverflow com questions 1048330 pause resume upload in c 使用 HTTP 恢复上传 https stackoverflow

随机推荐

  • 如何在 Windows 上安装 leveldb (Python)

    我尝试 Python 2 7 x pip install leveldb 但失败并显示消息 命令 python setup py Egg info 的完整输出 不知道如何为 Windows 编译 leveldb 有谁知道是否可以在 64 位
  • Lisp 中的最长递减序列

    我正在为即将到来的考试解决一些问题 我需要一些关于这个 Lisp 函数的帮助 我在 CLISP 工作 我必须找到列表中仅由奇数组成的最长递减序列 例子 longest 13 9 3 7 4 7 5 3 2 8 15 11 9 7 3 应该返
  • 如何计算两列中任意一列中出现的次数

    我有一个看起来很简单的问题 我有一个数据框df有两列 对于这两列中出现的每个字符串 我想计算任一列中具有该符号的行数 E g g k a h c i j e d i i h b b d d i a d h 下面的代码可以工作 但是效率很低
  • 指定新所有者进行预约。 “一项活动只​​能有一个业主方”

    创建新约会时 我需要更改约会记录的所有者 我正在使用一个插件来创建消息 并且我找到了此代码来为约会分配新所有者 entity context PostEntityImages PostImage AssignRequest request
  • 在 OpenCL 中获得最佳本地/全局工作组大小?

    我正在使用以下函数来获取 OpenCL 应用程序的最佳本地和工作组大小 maxWGSize CL KERNEL WORK GROUP SIZE wgMultiple CL KERNEL PREFERRED WORK GROUP SIZE M
  • wpf工具包图表旋转轴

    如何将轴上的文本从水平旋转为垂直 我无法通过 xaml 来完成此操作 因为我正在动态创建多个系列 并且在控件填充之前我不知道我将拥有多少个系列 我需要垂直或倾斜显示日期 而不是水平显示 再次感谢你 这篇文章解释了如何以适用于 WPF 和 S
  • Xcode 5 中的按键绑定

    我曾经这样做过 Xcode 重复行 但 IDETextKeyBindingSet plist 不再存在 有一个名为 KeyBindings 的文件夹 其中有一个空白文本文件 那么我们现在如何设置按键绑定呢 具体来说 我只想使用 comman
  • 提高网络编码性能

    我目前正在开发一个基于 Java 的网络编码库 http en wikipedia org wiki Network coding 这非常消耗 CPU 资源 因此需要一些帮助来优化编码阶段 我本质上所做的是创建原始数据的随机线性组合 其中加
  • assetLibrary 是一个简单的错误吗?

    我真的很失落 为什么我每个都得到两次 NSLogUIImage get the images from the camera roll assets NSMutableArray alloc init NSMutableArray came
  • 使用Python列出Windows 10上本地运行的服务?

    我所需要做的就是创建一个程序 列出 Windows 计算机上所有正在运行的服务 我尝试了很多方法 包括psutil 但都没有效果 此后我尝试通过尝试执行 net stat 命令来简化它 它可以工作 但输出是乱码 有没有办法把它保存到一个漂亮
  • vb.net 中的 lambda 表达式

    我有一些东西让我绝对疯狂 Public Function GetAccountGroups As IList Of AccountGroup Dim raw account groups As IList Of AccountGroup r
  • Android:在 NDK 中的 jar 文件中链接预构建的共享库 (.so)

    我有一个编译为 jar 文件的静态 java 库 该 jar 使用 System loadLibrary 加载 so 库 然后另一个 Android 应用程序项目静态链接该 jar 文件 所有内容都是使用 NDK 中的 Android mk
  • 命令“/bin/sh -c apt-get install erlang”返回非零代码:1

    我是 Docker 的初学者 使用 Ubuntu 18 04 作为主机 在寻找解决方案时 我得到的唯一结果就是增加虚拟机磁盘大小 因为它是由于内存不足而发生的 我没有使用虚拟机 可用磁盘大小为 87 GB 以下是我的 docker 文件内容
  • 将 Google Cloud App Engine 上的 Node.js 应用连接到 Google Cloud SQL 实例

    我有一个使用 MySQL 的 Node 应用程序 通过配置 json 连接 client mysql connection host something user something password something database
  • puppeteer page.evaluate 页面未定义

    我想用 puppeteer 在输入中输入内容 但它返回一个错误 页面未定义 async function login const browser await puppeteer launch headless false const pag
  • 如何从类型转换为泛型?

    嘿那里 给出的是这个类 public static class FooClass
  • 如何制作 Android EditView“完成”按钮并在单击时隐藏键盘?

    当用户点击EditView Android 打开键盘以便用户可以在EditView 问题是 当用户写完后 没有办法隐藏键盘 用户必须按后退按钮才能隐藏键盘 有没有办法显示Done键盘上的按钮会隐藏键盘吗 首先你需要设置android ime
  • 在 IE 上使用 jquery 访问 Iframe 内容

    我正在尝试使用隐藏的 Iframe 上传文件并获取响应 以下代码在 Firefox 上运行良好 但在 IE 上无法运行 它无法获取响应 Line var content j this contents find body last text
  • Android - 微调器的文本下拉列表/选择不显示

    我正在使用此示例代码来填充 Spinner 数据是从数据库中读取的 选择显示正确 在本例中 它显示 绿色 和 红色 Spinner spinnerColor Spinner findViewById R id spinnertProfile
  • 如何使用 SOCK_DGRAM 制作双向 unix 域套接字?

    我正在尝试编写一个简单的 Unix 数据报服务器 客户端 但遇到了一些问题 我想要的是一个监听数据报套接字并向原始发送者发送对收到的每条消息的回复的服务器 我决定先尝试使用socat成为 服务器 并用 C 编写客户端 我像这样运行 soca