长话短说,我在 C 中实现了一个混合网络。为此,我创建了几个单独的守护进程,它们侦听一段 TCP 端口(比如 31001-31008),在这些端口上接收数据并将其放入到一个缓冲区(比如 TCP 端口 31002 --> char *data[2]),然后最终将数据写到另一组端口(比如 51001-51008)到列表中的下一个守护进程。
有了这个,这就是我的困惑!我在这里和其他地方做了很多阅读,并决定最简单的方法是使用 libevent2。我基本上是从这个开始的(在页面底部):http ://www.wangafu.net/~nickm/libevent-book/Ref8_listener.html ...除了我打开 8 个端口而不是 1 个。
问题:我已经阅读了手册,但我对如何确定数据来自哪个端口有点困惑。例如,如果我在端口 31004 上接收数据,我想知道将其写入数据 [4]。
我想过为我打开的每个端口创建一个不同的回调,但这变得很难看。有没有更简单的方法?
这是我想要完成的一些伪代码,请随时提出建议!我也考虑过用 python 之类的东西来做这件事,但似乎 python 在事件方面也有同样的问题。
define baseport 31000
define numports 8
public char *data[numports];
callback:
/* a connection was made */
received_data = recv(blah)
databin = port_received_on % baseport
////// How do i know what port it was received on? /////
strncpy(data[databin], received_data, sizeof(data[databin]));
main:
for (i = 1; i <= numports; i++)
data[i] = malloc
struct event_base *base;
//setup base event, etc.
for (int i = 1; i <= numports; i++) {
//setup localhost connection, open 8 ports
sin.sin_port = htons(baseport + i);
//configure listener with callback to "callback"
}
dispatch