我有个客户机-服务器应用程序,在这里的客户是在一个窗户的移动6的装置,用C++编写和服务器上全面窗户和编写的。

最初,我只需要这消息发送从该客户向服务器、服务器永远只能送回一个确认,它接收到的信息。现在,我想要更新,这样的服务器实际上可以消息发送到客户要求的数据。因为我目前已经设立了这样的客户只有在接收模式之后,它向服务器发送数据,这并不能让服务器发送一个请求在任何时间。我会等待的客户数据。我首先想到的是创造另一个线上的客户用一个单独的打开插座,听服务请求...就像服务器已经在相对客户。有一种方式,在同一个线程和使用相同的插座,以将所有服务器发送请求在任何时候?

你可以用的东西的效果 WaitForMultipleObjects() 并通过它接收缓冲区以及一个事件,告诉它有数据被发送?

有帮助吗?

解决方案

当我需要写一申请,与客户机-服务器模型的客户的可以离开和进入,只要他们想要的,(I假设的情况下也为你的申请,因为你使用移动设备),我确信,客户发送一 在线 消息的服务器,表示他们都是连接的,并准备做什么他们需要做的事情。

在这一时间的服务器可能发信息回给客户槽相同的开放式连接。

还可以,但我不知道如果这是适用于你,我有某种 心跳 客户向服务器发送,让它知道,它仍然在线。这样的服务器都知道当一个客户被强行连接断开网络以及它可能标志着,客户背离线。

其他提示

使用异步通信完全是可能在单一的线!

有一个共同的设计图案的网络软件的开发所谓的反应模式(看看这本书).一些众所周知的网络图书馆提供了实现这一模式(看,ACE).

简单地说,反应是一个目的,你的注册所有插座里,你等待的东西。如果发生什么事了(新的数据来了,接近...)该反应堆将通知你。当然,你只能使用一个插座发送和接收的数据是异步的。

我不清楚是否是或不是你想添加一步到位的服务器在C#或客户在C++。

如果你在谈论这样做在C++、Windows桌面平台,可以做座I/O异步通过API,使用重叠的I/O.对于座,WSASend,WSARecv两者都允许异步I/O(阅读该文件在他们的LPOVERLAPPED参数,可以填入事件得到设定的时I/O完成).

我不知道如果Windows移动平台,支持这些功能,所以你可能需要做一些额外的挖掘。

检查了 asio.它是一个跨兼容c++库异步IO.我不知道,如果这将有助于服务器(我从来没有试图的链接标准c++DLL c#项目)但是,对于该客户将是有益的。

我们使用它们的应用,并解决我们的大多数IO并发问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top