通过相同的开放套接字进行异步多方向服务器 - 客户端通信?

Ada*_*ile 23 c# c++ sockets

我有一个客户端 - 服务器应用程序,客户端在Windows Mobile 6设备上,用C++编写,服务器在完整的Windows上,用C#编写.

最初,我只需要它从客户端向服务器发送消息,服务器只发回一个确认收到消息.现在,我想更新它,以便服务器实际上可以向客户端发送消息以请求数据.正如我目前设置的那样,客户端在向服务器发送数据后才处于接收模式,这不允许服务器随时发送请求.我将不得不等待客户数据.我的第一个想法是在客户端上创建另一个线程,使用一个单独的开放套接字,监听服务器请求......就像服务器已经拥有的客户端一样.是否有一种方法,在同一个线程内并使用相同的套接字,可以随时向所有服务器发送请求?

你可以使用一些东西,WaitForMultipleObjects()并传递一个接收缓冲区和一个事件,告诉它有数据要发送?

sve*_*ven 8

当我需要编写一个客户端 - 服务器模型的应用程序时,客户端可以随时离开并进入,(我假设你的应用程序也是如此,当你使用移动设备时)我确保客户端发送在线消息到服务器,表明他们已经连接并准备好做他们需要做的事情.

那时服务器可以通过相同的开放连接将消息发送回客户端.

此外,但我不知道这是否适用于你,我有一些心跳客户端发送到服务器,让它知道它仍然在线.这样,服务器就知道客户端何时被强行断开网络,并且可以将该客户端标记为脱机.


Ste*_*ury 7

在单线程中完全可以使用异步通信!

网络软件开发中有一种常见的设计模式叫做reactor模式(看看这本书).一些众所周知的网络库提供了这种模式的实现(看看ACE).

简而言之,反应堆是一个物体,你在里面注册所有的插座,然后等待一些东西.如果发生了某些事情(新数据到达,连接关闭......),反应堆将通知您.当然,您只能使用一个套接字异步发送和接收数据.