Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.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# 同一开放套接字上的异步多方向服务器客户端通信? 我有一个客户机-服务器应用程序,客户机在Windows Mobile 6设备上,用C++编写,服务器是全窗口的,用C语言编写。p>_C#_C++_Sockets - Fatal编程技术网

C# 同一开放套接字上的异步多方向服务器客户端通信? 我有一个客户机-服务器应用程序,客户机在Windows Mobile 6设备上,用C++编写,服务器是全窗口的,用C语言编写。p>

C# 同一开放套接字上的异步多方向服务器客户端通信? 我有一个客户机-服务器应用程序,客户机在Windows Mobile 6设备上,用C++编写,服务器是全窗口的,用C语言编写。p>,c#,c++,sockets,C#,C++,Sockets,最初,我只需要它将消息从客户端发送到服务器,而服务器只发送回它收到消息的确认。现在,我想对其进行更新,以便服务器可以向客户机发送消息以请求数据。由于我目前已将其设置为客户端仅在向服务器发送数据后才处于接收模式,因此不允许服务器在任何时候发送请求。我将不得不等待客户端数据。我的第一个想法是用一个单独的开放套接字在客户端上创建另一个线程,监听服务器请求……就像服务器已经在客户端上一样。在同一个线程内,使用同一个套接字,是否有一种方法可以随时向所有服务器发送请求 你能使用一些类似于WaitForMul

最初,我只需要它将消息从客户端发送到服务器,而服务器只发送回它收到消息的确认。现在,我想对其进行更新,以便服务器可以向客户机发送消息以请求数据。由于我目前已将其设置为客户端仅在向服务器发送数据后才处于接收模式,因此不允许服务器在任何时候发送请求。我将不得不等待客户端数据。我的第一个想法是用一个单独的开放套接字在客户端上创建另一个线程,监听服务器请求……就像服务器已经在客户端上一样。在同一个线程内,使用同一个套接字,是否有一种方法可以随时向所有服务器发送请求


你能使用一些类似于WaitForMultipleObjects()的东西,并向它传递一个接收缓冲区和一个事件,告诉它有数据要发送吗?

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

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


还有,但我不知道这是否适用于您,我有一些客户端发送到服务器的心跳信号,让它知道它仍然在线。这样服务器就知道客户端何时被强制断开与网络的连接,并且它可以将该客户端标记为离线。

我不清楚您是否要添加C++中的异步位或C++中的客户端

如果您在C++中讨论这一点,桌面Windows平台可以通过使用重叠I/O的API异步地进行套接字I/O,对于套接字,WSASend、WSARecv都允许异步I/O(读取它们的LimLIPAP参数的文档,这些文件可以填充I/O完成时设置的事件)。

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

检查。它是一个可交叉编译的C++库,用于异步的IO。我不确定这是否对服务器有用(我从未尝试将标准的C++ DLL链接到C语言项目)。但对于客户来说,这将是有用的


我们在应用程序中使用它,它解决了大多数IO并发问题。

在单线程中使用异步通信是完全可能的

网络软件开发中有一种常见的设计模式,称为reactor模式()。一些著名的网络库提供了该模式的实现()

简单地说,reactor是一个对象,您在其中注册所有套接字,然后等待。如果发生了什么事情(新数据到达,连接关闭…),reactor将通知您。当然,您只能使用一个套接字异步发送和接收数据