使用单个MFC模式对话框链接多个CAsyncSocket服务器和客户端的可能性

使用单个MFC模式对话框链接多个CAsyncSocket服务器和客户端的可能性,mfc,Mfc,在我的一个MFC应用程序中,我有一个CAsyncSocket派生类和一个模态对话框。套接字事件处理程序(例如OnAccept()OnReceive())与对话框的相关对话框成员函数链接。该应用程序有两个套接字服务器;其中一个必须只为一个客户服务,另一个必须为多个客户服务(例如4/5个客户)。应用程序还有一个套接字客户端,它必须连接到服务器。目前,其中一个服务器套接字(仅处理一个客户端)是CAsyncSocket派生类的实例。为多个客户端提供服务的服务器是一个阻塞套接字,它接受客户端连接并在不同的

在我的一个MFC应用程序中,我有一个CAsyncSocket派生类和一个模态对话框。套接字事件处理程序(例如OnAccept()OnReceive())与对话框的相关对话框成员函数链接。该应用程序有两个套接字服务器;其中一个必须只为一个客户服务,另一个必须为多个客户服务(例如4/5个客户)。应用程序还有一个套接字客户端,它必须连接到服务器。目前,其中一个服务器套接字(仅处理一个客户端)是CAsyncSocket派生类的实例。为多个客户端提供服务的服务器是一个阻塞套接字,它接受客户端连接并在不同的线程中为它们提供服务。我的应用程序中的客户端套接字也是在另一个线程中运行的阻塞套接字

如果我希望应用程序的服务器和客户端都是CAsyncSocket并与单个对话框链接:

  • 这种方法正确可行吗
  • 定义对话框的OnReceive()和OnSend()成员的最佳方法是什么,这样每个服务器和客户端都可以及时发送/接收消息,并且可以正确区分消息的来源
  • OnReceive()函数是否存在拥塞的可能性;如果是这样,有什么补救办法
  • 如果我想要实现的设计在单个对话框中不可行,那么正确的实现方法是什么

  • 非常感谢您在这方面提供的任何帮助。

    CAsyncSocket是一个非阻塞套接字,因此您关于某些套接字正在阻塞的声明需要澄清。套接字事件处理程序(OnAccept、OnReceive…)必须位于从CAsyncSocket派生的类中。但是,如果愿意,可以让这些处理程序在对话框中调用函数。这就是你所说的链接吗

    创建套接字对象时,可以向其构造函数传递存储在成员变量中的标识号。您还可以传递指向该对话框的指针。然后,当它从OnReceive调用对话框时,它可以将该标识号传递回对话框,以便对话框可以区分源是什么

    OnReceive不会出现拥塞:通知和套接字数据都已排队,因此它们将等待您处理它们。如果您的速度非常慢,TCP/IP逻辑最终将暂停发送方,直到您处理它排队的任何内容


    因为CAsyncSocket是一个非阻塞套接字,所以可以从一个对话框处理其中的许多套接字。不需要多线程,线程将增加不必要的复杂性和问题。你应该首先让它在主线程中工作

    我正在使用2个套接字服务器。一种是非阻塞CAsyncSoket,它只处理一个客户端。另一个是阻塞套接字,处理4/5个客户端;这个阻塞套接字在工作线程中侦听,在循环中接受连接,并为每个连接创建一个工作线程来处理客户端。是,第一个服务器类派生自CAsyncSocket,套接字事件处理程序依次调用对话框中的相关函数。现在,我想使用CAsyncSocket使第二台服务器成为非阻塞服务器。你的解释听起来不错,我可以从同一个对话框中处理2台服务器和1台客户端。