Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中的数据驱动联网方法。这可以';这不是新的吗?_C_Networking_Data Driven - Fatal编程技术网

C语言中的数据驱动联网方法。这可以';这不是新的吗?

C语言中的数据驱动联网方法。这可以';这不是新的吗?,c,networking,data-driven,C,Networking,Data Driven,我想知道以前是否做过类似的事情: 我最近开始在C中开发一个网络库。该库维护一组套接字,每个套接字与两个FIFO字节流(输入和输出)关联 使用库的开发人员需要注册一些回调,包括识别器函数和处理程序函数。如果新数据到达套接字(即输入流),则调用每个识别器。如果其中一个识别器发现数据的匹配部分,则调用其关联的处理程序,使用数据并可能在套接字的输出流上对新数据排队,计划稍后传输 下面是一个示例,说明如何使用该库: // create client socket client = nc_create(NC

我想知道以前是否做过类似的事情:

我最近开始在C中开发一个网络库。该库维护一组套接字,每个套接字与两个FIFO字节流(输入和输出)关联

使用库的开发人员需要注册一些回调,包括识别器函数和处理程序函数。如果新数据到达套接字(即输入流),则调用每个识别器。如果其中一个识别器发现数据的匹配部分,则调用其关联的处理程序,使用数据并可能在套接字的输出流上对新数据排队,计划稍后传输

下面是一个示例,说明如何使用该库:

// create client socket
client = nc_create(NC_CLIENT);

// register some callback functions that you'll have to supply yourself
nc_register_callback(client, &is_login, &on_login);
nc_register_callback(client, &is_password, &on_password);

// connect to server
nc_dial(client, "www.google.com", "23");

// start main loop (we might as well have more than one connection here)
nc_talk();
对我来说,这是用C语言编写通用网络库最明显的方法。我用谷歌做了一些研究,但我找不到用C语言编写的类似内容。但很难相信我是第一个实现这种方法的人

还有其他类似的数据驱动的通用C网络库吗?

您会使用它们吗?

以下是一些提供类似API的库(在不同级别,例如libevent为套接字/文件描述符提供了一个通用的回调驱动API)

()

Sun/API有类似的风格,因为库为您完成繁重的工作,将请求发送到适当的回调处理程序


Java和库的工作方式类似,但更面向对象。

这里有几个库提供了类似的API(在不同级别,例如libevent为套接字/文件描述符提供了一个通用的回调驱动API)

()

Sun/API有类似的风格,因为库为您完成繁重的工作,将请求发送到适当的回调处理程序


Java和库以类似的方式工作,尽管更面向对象。

我不知道有哪一个库可以做到这一点,但我以前在多协议VoIP系统中编写过同样的代码。我遇到的问题是,探测器需要重量轻,因为它们都在每个数据包上运行,但其中一些探测器最终需要复杂且有状态。(例如,一个试图确定给定输入数据包是否为RTP的检测器,你只能通过孤立地分析数据包本身,才能确定你需要分析整个流,看看Seq和SSRC是否有效,或者甚至可能需要SIP/SDP数据包来知道数据包的类型contains@bdk:谢谢你的评论!哟你是对的,我也注意到了这一点。我在帖子中描述的方法可能最适合于无状态对话,如协议:SMTP、POP3、IMAP、IRC、telnet等。我不知道有哪个库可以做到这一点,但我以前也写过同样的代码,作为多协议VoIP系统的一部分。我遇到的问题是检测器需要安装重量轻,因为它们都在每个数据包上运行,但其中一些最终需要复杂和有状态。(例如,一个试图确定给定输入数据包是否为RTP的检测器,你只能通过孤立地分析数据包本身,才能确定你需要分析整个流,看看Seq和SSRC是否有效,或者甚至可能需要SIP/SDP数据包来知道数据包的类型contains@bdk:谢谢你的评论!哟你是对的,我也注意到了这一点。我在帖子中描述的方法可能最适合于无状态会话,如SMTP、POP3、IMAP、IRC、telnet等协议。libesmtp(SMTP)和libcurl(文件传输)没有资格成为通用库,但libevent看起来很有前途。乍一看,我喜欢它的API。谢谢你的提示!Libestp(SMTP)和libcurl(文件传输)没有资格成为通用库,但libevent看起来很有前途。乍一看,我喜欢它的API。谢谢你的提示!