客户端程序在简单的C客户端/服务器消息通信中无法正常工作

时间:2013-02-26 05:03:26

标签: c client-server qnx

我正在做一个实验室任务,我们制作一个服务器程序和一个客户端程序。它在QNX OS上。不确定它是否在Linux中运行。大纲如下:

“编写一对C程序msgSender.c和msgLogger.c来演示进程之间传递的Neutrino消息。

您的程序将从shell调用:

$ msgLogger logFileName $ msgSender msgLogger

logFileName是存储消息的日志的名称

msgLogger进程充当记录器。它接收消息并将消息写入文件。

  1. msgLogger接收msg.h中显示的格式的基于文本的消息。如果消息类型为MSG_DATA,它必须测试消息头并仅将消息文本写入logFile。
  2. 如果收到MSG_DATA,则回复状态为MSG_OK。
  3. 如果收到MSG_END,服务器将回复状态为MSG_END,然后清理并退出。
  4. 如果收到的消息不是MSG_DATA或MSG_END,则回复状态为MSG_INVALID,并且不记录消息文本。将记录一条警告消息。
  5. 此过程通过将其ND PID CHID写入名为msgLogger.pid的文件来通告其存在,其中文件名的“msgLogger”部分取自argv [0]。
  6. 记录的消息标有时间和发件人的ND PID COID。
  7. msgSender是一个交互式程序,用于汇编和发送基于文本的消息。

    1. 从命令行读取记录器进程的名称,并使用此名称构建.pid文件的名称,其中它读取ND PID CHID。
    2. 它会提示用户输入消息标题类型,然后提示消息文本。
    3. 如果从服务器收到MSG_END,它将退出。
    4. 如果从服务器收到MSG_INVALID,则会打印警告

      • 您的客户端和服务器必须与我的客户端和服务器互操作。
      • 验证服务器是否可以正常使用多个并发客户端。
      • 如果在每次记录消息后刷新服务器的文件写入缓冲区,则可以在后台运行并使用 $ tail -f logFile 查看收到的邮件。
      • 请务必检查命令行参数的有效性。
      • 仅在必要时使用全局变量。 “
    5. 我让msgLogger完全正常工作;这是代码: http://pastebin.com/8AGfGZ5u

      这是msg.h文件: http://pastebin.com/3xcBZvnH

      以下是我到目前为止msgSender的代码: http://pastebin.com/Buk88Kry

      发件人(客户端)需要做的是让用户使用数字输入消息类型。 msg.h文件包含MSG_DATA为1的消息编号类型等。如果输入无效数字,它将要求他们再次尝试,否则它将存储该数字并将其分配给amsg.m_hdr MESSAGE结构。 amsg.m_data是带消息的值。

      然后用户输入他们想要的消息,如果他们选择了数字1(msg_data),则服务器发送通知,客户端打印“消息成功接收”,同时消息内容保存到日志文件中。

      不幸的是,我遇到了很多问题而且没有记录消息。我明天必须交上msgSender,这也取决于我的下一个实验室。我真的希望能得到一些帮助。

1 个答案:

答案 0 :(得分:0)

在客户端写入后尝试刷新缓冲区。如果您在写入文件时没有关闭文件描述符,则无法刷新缓冲区并写入文件。您可以通过调用fsync()确保所有写入同步到您想要的文件。

相关问题