详解MFC服务器监听原理及应用 (mfc服务器监听)

在计算机网络应用中,服务器与客户端的通信是至关重要的。本文将详细介绍MFC服务器监听的基本原理、应用及其优势。

一、MFC服务器监听原理

MFC是微软基础类库中的一部分,该库提供了许多用于快速开发Windows应用程序的类和函数。MFC服务器监听就是其中之一。

服务器监听是指在服务器端通过套接字等方式处于“监听”状态,等待客户端发起连接请求。在MFC中,服务器监听一般是在Mn函数中启动。代码如下:

if (!AfxSocketInit())

{

AfxMessageBox(“Socket初始化失败!”);

return FALSE;

}

CSocketServer myServer;

if (!myServer.Create(1234))

{

AfxMessageBox(“Socket创建失败!”);

return FALSE;

}

if (!myServer.Listen())

{

AfxMessageBox(“侦听失败!”);

return FALSE;

}

while (TRUE)

{

CSocket* pClient = new CSocketClient;

if (!myServer.Accept(*pClient))

{

delete pClient;

continue;

}

AfxBeginThread(ThreadProc, pClient);

}

在上述代码中,AfxSocketInit()函数用于初始化Socket,Create()函数用于创建Socket,Listen()函数用于开始监听。当客户端连接到服务器时,Accept()函数会返回连接到的客户端Socket,接下来启动多线程的服务线程,然后返回继续循环等待下一个客户端连接。

二、MFC服务器监听的应用

MFC服务器监听用来实现客户端和服务器之间的通信。例如,一个聊天室程序就需要进行客户端和服务器之间的通信。客户端可以发送聊天消息给其他客户端,服务器要将该消息转发给其他客户端。这就需要服务器监听,等待客户端发送消息,并将消息转发给其他客户端。

在MFC服务器监听中,需要自己设计通信协议,例如消息格式、消息命令等。常见的通信协议有自定义协议、TCP、UDP等。自定义协议的优点是自由度高,可以根据需求灵活定制;TCP协议则是一种传输可靠的协议,能够保证数据传输的完整性和准确性。

三、MFC服务器监听的优势

MFC服务器监听具有以下优点:

1、稳定性高

MFC服务器监听采用多线程方式处理客户端请求,能够有效降低单线程处理客户端请求可能引起的崩溃问题。

2、并发性高

MFC服务器监听采用多线程处理客户端请求,能够同时处理多个客户端请求,提高并发性。

3、可扩展性强

MFC服务器监听的架构通常是基于多线程处理客户端请求的,当客户端数量变大时,只需要增加线程数量,而不需要重新修改代码。

4、性能高

MFC服务器监听采用多线程方式处理客户端请求,并且采用线程池方式管理这些线程,能够有效提高服务器性能。

四、

本文详细介绍了MFC服务器监听的基本原理、应用及其优势。MFC服务器监听是实现客户端和服务器之间通信的一种方法,具有稳定性高、并发性高、可扩展性强、性能高等优点。在实际应用中,需要根据需求来选择通信协议,设计消息格式、消息命令等,并考虑安全性、可靠性等因素,以满足实际需求。

相关问题拓展阅读:

MFC是如何接收用套接字传来的数据的?

一、接收与发送过程:

服务器端

  1、创建服务器套接字(CREATE)。

  2、服务器套接字进行信息绑定(BIND),并开始监听连接(LISTEN)。

  3、接受来自客户端的连接请求(ACCEPT),并创建接收进程。

  4、开始数据传输(SEND、RECEIVE)。

  5、关闭套接字(CLOSESOCKET)。

客户机端

  1、创建客户机套接字(CREATE)。

  2、与远程服务器进行连接(CONNECT),如被接受则创建接收进程。

  3、开始数据传输(SEND、RECEIVE)。

  4、关闭套接字(CLOSESOCKET)。

二、在VC中的实现:

  服务器端:

  一、建立支持SOCKET项目。

  利用APP WIZARD创建MFC EXE项目,进行到WIZARD的第四步时,在“What features would you like include?”中,选中“Windows Sockets”项。其它各步骤各选项根据实际应用进行选择即可。这样创建的项目就已经支持SOCKET,并已经初始化了。

  如果要在已有的项目中添加SOCKET支持,只须进行两项工作:

  1、在stdafx.h文件中包含头文件WINSOCK.H (#include “winsock.h” )。

  2、在应用程败迹序类的成员函数:“::InitInstance()”中添加如下初始化套接字代码。

if (!AfxSocketInit())

  {AfxMessageBox(IDP_SOCKETS_INIT_FAILED);  return FALSE;}

  二、创建服务套接字并创建监听线程。

//创建服务套接字

  SOCKET sercon=socket(PF_INET,SOCK_STREAM,0);

  //判断是否成功创建

  if (sercon==INVALID_SOCKET)

  {AfxMessageBox(“Server WRONG !”);  return -1;}

  //配置套接字地址等信息

  SOCKADDR_IN sin;

  sin.sin_family=AF_INET;

  //指定本地地址

  sin.sin_addr.s_addr=htonl(INADDR_ANY);

  //指定服务器端口号nPort,可自设

  int 清棚nPort=5080;

  sin.sin_port=htons(nPort);

  //地址信息与套接字进行绑定。

  if (bind(sercon,(LPSOCKADDR)&sin,sizeof(sin))==SOCKET_ERROR)

  {AfxMessageBox(“bind wrong!”);  return -1;}

  //建立监听队列(大小为3),开始监听

  if (listen(sercon,3)==SOCKET_ERROR)

  {AfxMessageBox(“listen wrong!”);  return -1;};

  ①实现监听线程,并创建数据接收线程。

  //在程序需要开始监听连接的地方答枯则创建监听线程,并实现。

  //创建监听线程(在程序开始或按钮事件实现中)

  AfxBeginThread(waitconnect,NULL);

  //实现监听线程

  UINT waitconnect(LPVOID lpParm)

  {SOCKET conn;  int lenc=sizeof(sockaddr);  int alreadycon=0;  //sercon为前面所创建服务器套接字  while(1)  {if (alreadycon0)

  buf=0;//截断缓冲区

  //buf中存储已接受数据。}

  }

  ③发送数据

  //conn为用于接受连接的套接字, sendstr为所发送数据。

  send(conn,LPCTSTR(sendstr),sendstr.GetLength(),0);

  ④关闭套接字。

  //conn为用于接受连接的套接字

  closesocket(conn);

  客户程序端:

  客户端程序的编程有很多与服务器端相同或相近,甚至相同的代码。

  一、建立支持SOCKET项目。

  方法同服务器端。

  二、创建客户套接字、对服务器进行连接。

  //nHost 须用户指定的远程服务机,IP或域名。

  CString nHost;

  //h为地址信息

  struct hostent *h;

  h=gethostbyname(nHost);

  //nHost 须用户指定的远程服务端口号

  int nPort;

  SOCKET con_client;

  SOCKADDR_IN csin;

  if (h!=NULL)

  {//创建套接字

  con_client =socket(AF_INET,SOCK_STREAM,0);

  csin.sin_family=AF_INET;

  memcpy(&(csin.sin_addr.s_addr),h->h_addr,sizeof(int));

  csin.sin_port=htons(nPort);

  //开始连接

  if (connect(con_client,(LPSOCKADDR)&csin,sizeof(csin)))

  {//AfxMessageBox(“connect wrong!”); 

  return -1;}

  else

  {//连接成功,创建数据接收线程

  AfxBeginThread(readdata,&con_client);}

  }

  三、实现数据接收线程。

  代码与服务器端完全相同。

  四、发送数据。

  //con_client 为与服务器进行连接的套接字。

  send(con_client,LPCTSTR(sendstr),sendstr.GetLength(),0);

  五、关闭套接字。

  // con_client 为与服务器进行连接的套接字。

  closesocket(conn);

利用MFC实现局域网类的通讯功能

服务器开盯镇一个UDP端口监听消息,客户端启动的时候,向局域网广播一条消息(你自基册定,到服务器指定的端口),服务器收到消息之后,给客户端回复一条消息。这样能获得IP。客搏则宏户端手动回复以后,向对方发送条消息询问用户名,对方收到就回复用户名(这和日常通信差不多了,只是用UPD协议)。

socket可以实现你的要求

mfc中封装了csocket(世世同步)和casyncsocket(异步)这孙物两个搜凯肢类,可以看下

mfc服务器监听的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于mfc服务器监听,详解MFC服务器监听原理及应用,MFC是如何接收用套接字传来的数据的?,利用MFC实现局域网类的通讯功能的信息别忘了在本站进行查找喔。


数据运维技术 » 详解MFC服务器监听原理及应用 (mfc服务器监听)