c - 在 C 中的两个服务器之间传递数据的最佳方式?

标签 c sockets ipc

我写了一个程序,用 C 语言创建一个 TCP 和 UDP 套接字,并启动两个服务器。该应用程序的目标是通过 TCP 套接字监视关于发送什么 UDP 数据包的请求(即监视类似“0x01 0x02”的内容,如果我看到它,则让 UDP 服务器解析有效负载,并将其转发到 TCP 服务器进行处理)。问题是,UDP 服务器将忙于保持另一台设备的运行,实际上与该设备来回发送数千个数据包。那么,持续监视来自 TCP 服务器的请求,但由于 UDP 服务器会很忙而在请求时从 UDP 服务器向其发送某些有效负载的最佳方法是什么?

我研究了带有信号量和/或互斥量的 pthreads(不确定所有套接字操作都是线程安全的,但是,如果这是接近它的正确方法)以及 fork/pipe。将 UDP 服务器作为子进程 fork 似乎很容易,但我不明白我将如何在两个服务器之间传递我需要的数据类型(需要来自 TCP 的请求数据和来自 UDP 的有效负载数据)。

最佳答案

首先,将这两个服务器放在一个程序中是否有意义?如果是这样,您将不必在进程之间进行通信,并且整个逻辑变得更加容易。您将不得不考虑进行异步输入和输出,select() 函数正是为此而设计的。关于如何做到这一点会有很多解释,快速浏览会发现 this page .

但是,如果您必须有两个单独的进程,那么您需要为 inter-process communication 选择一种机制。 ,其中有几种,您的选择将受到您的操作系统的影响。 pipe , 如果可用的话,可能是合适的,就像 Unix named pipe .或者您可以查看第三方消息传递框架,或者只使用共享内存和/或信号量(但要非常小心!)。

关于c - 在 C 中的两个服务器之间传递数据的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3997020/

相关文章:

c - 如何从重申中获取 bool 值

apache-flex - AS3 中的 TCP 流量控制?

php - 如何接受与设备的多个连接

perl - 如何使用 IPC::Run 回答 rsync 密码提示?

c - 中断组合键(例如 CTRL-C)如何以及何时转换为信号?

delphi - TPipeServer 和 TPipeClient 组件的读/写示例代码和安全检查

C编程/这两个代码有什么区别

C++ 类型转换 int 到 union

c++ - 通过套接字在 Octave 和 C++ 程序之间发送数据

C 程序在尝试从 main 调用函数后挂起