我正在做一个实验任务,我们制作一个服务器程序和一个客户端程序。它在 QNX 操作系统上。不确定它是否在 Linux 中运行。大纲是这样的:
“编写一对 C 程序 msgSender.c 和 msgLogger.c 来演示进程之间的 Neutrino 消息传递。
您的程序将从 shell 调用为:
$ msgLogger logFileName $ msgSender msgLogger
logFileName 是存储消息的日志的名称
msgLogger 进程充当记录器。它接收消息并将消息写入文件。
- msgLogger 接收 msg.h 中所示格式的基于文本的消息。它必须测试消息头并且仅在消息类型为 MSG_DATA 时将消息文本写入日志文件。
- 如果接收到 MSG_DATA,则回复状态为 MSG_OK。
- 如果收到 MSG_END,则服务器回复状态为 MSG_END,然后清理并退出。
- 如果收到的消息不是 MSG_DATA 或 MSG_END,则回复状态为 MSG_INVALID,并且不记录消息文本。将记录一条警告消息。
- 该进程通过将其 ND PID CHID 写入名为 msgLogger.pid 的文件来宣传其存在,其中文件名的“msgLogger”部分取自 argv[0]。
- 记录的消息带有时间和发件人的 ND PID COID 标记。
msgSender 是一个交互式程序,用于组装和发送基于文本的消息。
- 从命令行读取记录器进程的名称,并使用该名称来构建 .pid 文件的名称,它会在其中读取 ND PID CHID。
- 它提示用户输入消息标题类型,然后提示用户输入消息文本。
- 如果它收到来自服务器的 MSG_END,它将退出。
如果从服务器接收到 MSG_INVALID,它会打印一个警告
- 您的客户端和服务器必须与我的客户端和服务器互操作。
- 验证服务器是否与多个并发客户端正常工作。
- 如果在每条日志消息之后刷新服务器的文件写入缓冲区,则可以在后台运行它并使用 $ tail -f logFile 来查看收到的消息。
- 请务必检查命令行参数的有效性。
- 仅在必要时使用全局变量。"
我已经让 msgLogger 完全正常工作了;这是代码: http: //pastebin.com/8AGfGZ5u
这是 msg.h 文件: http ://pastebin.com/3xcBZvnH
这是迄今为止我为 msgSender 提供的代码:http: //pastebin.com/Buk88Kry
发送者(客户端)需要做的是让用户使用数字输入消息类型。msg.h 文件包含消息编号的类型,其中 MSG_DATA 为 1 等。如果他们输入无效数字,它将要求他们重试,否则它将存储该数字并将其分配给 amsg.m_hdr消息结构。amsg.m_data 是消息的值。
然后用户输入他们想要的消息,如果他们选择了数字1(msg_data),服务器发送通知,客户端打印“消息成功接收”,同时消息的内容被保存到日志文件中。
不幸的是,我遇到了很多问题,并且没有记录消息。我明天必须交 msgSender,这也取决于我的下一个实验室。我真的希望我能得到一些帮助。