将非 IOCP 客户端与 IOCP 服务器连接

Posted

技术标签:

【中文标题】将非 IOCP 客户端与 IOCP 服务器连接【英文标题】:Connecting non-IOCP client with IOCP Server 【发布时间】:2013-09-27 10:54:17 【问题描述】:

我正在设计一个客户端-服务器应用程序。 我的服务器将使用 C++ 并使用 IOCP 进行 TCP/IP 通信。

尚未决定用于客户开发的技术。所以我对 IOCP 与将来开发的客户端的兼容性有几个问题(我需要冻结服务器的设计):

    我可以使用java的通用套接字编程(客户端更可能在java中开发)与基于IOCP的服务器通信吗?

    IOCP 如何响应客户端连接的突然和正常终止(我将在服务器上收到什么通知)?

谢谢

尼朋

【问题讨论】:

【参考方案1】:

你这里说的是socket编程,中间层是TCP/IP,所以网络编程库(比如IOCP)是无关紧要的。您可以在客户端使用任何语言或库。

【讨论】:

没错,但这并不意味着它很容易做到。这就像说 CORBA 只是 TCP。根据 IOCP 库的先进程度,可能很难对其进行逆向工程。 @Prof.Falken 那是……不是 Hei 说的。 IOCP 服务器仍然使用 TCP/IP 协议与客户端通信,它使用 IOCP 技术这一事实与客户端无关,是一个实现细节。客户端可以通过数字信鸽连接到它,只要它遵循 TCP 协议。我看不出 IOCP 库的逆向工程与这个问题有什么关系。 @Thomas,好的,那么我完全误解了这个问题和这个答案。仍然不确定......也许这是相关的***.com/questions/10978765/… @Prof.Falken - IOCP 只是在 Windows 上以异步和高效方式使用套接字 API 的一种方式。只要服务器使用 TCP/IP,客户端就可以使用任何支持 TCP/IP 的语言或技术。这不像说“CORBA 就是 TCP”,CORBA 是一种对象模型和有线协议,可以使用 TCP/IP 作为较低级别的通信通道;就像 DCOM 可以使用 TCP/IP 作为较低级别的通信通道一样。与使用 IOCP 绝对没有可比性。【参考方案2】:

对于第一个问题,是的,只要您使用 TCP/IP 协议,您就可以使用任何语言。

对于第二个问题,我的解决方案是,为iocp创建一个停止事件,每隔一段时间,发送一个小包给客户端,如果客户端没有回复这个包,设置停止事件,并释放连接客户

【讨论】:

以上是关于将非 IOCP 客户端与 IOCP 服务器连接的主要内容,如果未能解决你的问题,请参考以下文章

IOCP实现高并发以及与传统socke编程的对比

服务器-客户端之间的 IOCP 或 TASK 通信

IOCP AcceptEx 在连接时未创建完成

网络模型之IOCP与扩展函数

当服务器基于 iocp 时,我是不是需要让客户端支持 iocp?

IOCP 服务器的非 IOCP 客户端发送/接收错误