`
yimeng500
  • 浏览: 54641 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

用vc++实现服务器端

阅读更多

  在vc++中,有一个CSocket类,可以用来实现服务器端的功能。事实上,对于每一个客户端,服务器端必须有一个Socket对象与之相连,即是说如果有n个客户请求连接,则需要有n个socket对象,有n+1个客户请求连接,就必须有n+1个socket对象。所以,我们需要动态改变socket对象的个数,我们的设计思路如下:

①从CSocket类派生出一个CListenSocket类,并创建一个CListenSocket类的对象,专门用来监听客户端的请求,再从CSocket类派生出一个CClientSocket类,专门用来和客户端保持连接。

②一旦CListenSocket类的对象接收到一个请求,马上创建出一个CClientSocket类的对象,并让这个对象与客户端保持连接,而且我们要创建一个链表,每当增加一个CClientSocket类的对象时,就将它加入到链表中。

③任何一个CClientSocket类的对象的对象收到一个从flash传送过来的信息,马上让所有的CClientSocket类的对象将这个信息传送到客户端,实现信息的转发。

  下面,请大家跟着我一步一步来实现:

1.通过AppWizard生成一个基于对话框的应用程序GameSvr,在向导的第二步选择Windows Sockets的支持,其余步骤均采用默认值。

2.给CGameSvrDlg类添加一个变量int i;用来限制连接数,如下:

protected:  int i=0;
3.通过ClassWizard生成基于CSocket的新类CListenSocket,用来监听请求。

4.给CListenSocket类声明一个主对话框CGameSvrDlg指针类型的私有成员变量,如下:

protected:

  CGameSvrDlg *m_pDlg;
5.给CListenSocket类重载一个构造函数:

CListenSocket::CListenSocket(CGameSvrDlg* pDlg)
{
  m_pDlg=pDlg;
}  并且在CListenSocket类的cpp文件开始处增加如下语句:

#include "CGameSvrDlg.h"
6.通过ClassWizard响应CListenSocket类的OnAccept函数,表示有客户端连接,其代码如下:

void CListenSocket::OnAccept(int nErrorCode)
{
  CSocket::OnAccept(nErrorCode);
  //主对话框处理连接信息
  if(m_pDlg){
    m_pDlg->ProcessPendingAccept();
  }
}

7.通过ClassWizard生成CClientSocket类用来与客户端通信;

8.给CClientSocket类声明一个主对话框CGameSvrDlg指针类型的私有成员变量,如下:

protected:  CGameSvrDlg *m_pDlg;

9.给CClientSocket类重载一个构造函数:

CClientSocket::CClientSocket(CGameSvrDlg* pDlg)
{
  m_pDlg=pDlg;
}  并且在CClientSocket类的cpp文件开始处增加如下语句:

#include "CGameSvrDlg.h"

10.通过ClassWizard响应CClientSocket类的OnReceive()函数,表示有数据来了,其代码如下:

void CClientSocket::OnReceive(int nErrorCode)
{
  CSocket::OnReceive(nErrorCode);
  //主对话框处理连接信息
  if(m_pDlg){
    m_pDlg->ProcessPendingRead(this);
}

11.在主对话框CGameSvrDlg的头文件中增加两个私有成员变量,如下:

CListenSocket* m_pSocket;
CPtrList m_connectionList;
//客户端Socket链表并且在CGameSvrDlg的头文件开始处增加以下代码:
class CListenSocket;
class CClientSocket;

12.给主对话框CGameSvrDlg增加处理客户端连接信息的私有成员函数ProcessPendingAccept(),其定义如下:

void CGameSvrDlg::ProcessPendingAccept()
{
  if(i<8){
    char s[11];
    sprintf(s,"<id>%d</id>",i);
    m_pSocket->send(s,strlen(s),0);
    CClientSocket *pSocket=new CClientSocket(this);
    if(m_pSocket->Accept(*pSocket)){
      //将该Socket保存在链表中
      m_connectionList.AddTail(pSocket);
    }else{
      delete pSocket;
    }
  }else{
    char s[16];
    s="<err>full</err>";
    m_pSocket->send(s,strlen(s),0);
  }
  i++;
}


13.给主对话框CGameSvrDlg增加更新所有客户端的私有成员函数UpdateClients,其定义如下:

void CGameSvrDlg::UpdateClients(char *buffer,int nBufferSize)
{
  for(POSITION pos=m_connectionList.GetHeadPosition();pos!=NULL;)
  {
    CClientSocket *pSocket=(CClientSocket*)m_connectionList.GetNext(pos);
   
    if(buffer!=NULL)pSocket->send(buffer,nBufferSize,0);
  }
}


14.给主对话框CGameSvrDlg增加接收数据的私有成员函数ProcessPendingRead,其定义如下:
void CGameSvrDlg::ProcessPendingRead(CClientSocket *pSocket)
{
  char buffer[BUFFER_SIZE];
  int nReceived=pSocket->Receive(buffer,BUFFER_SIZE,0);
  buffer[nReceived]=0;
  //将数据发给每一个用户
  UpdateClients(buffer,nReceived);
}
  并且在对话框CGameSvrDlg类的头文件开始处定义缓冲区的大小,如下:

#define BUFFER_SIZE 100


15.在主对话框CGameSvrDlg的OnInitialUpdate函数中添加如下代码:

BOOL CGameSvrDlg::OnInitDialog(){
  CDialog::OnInitDialog();
  //其他代码
  //……
  m_pSocket=new CListenSocket(this);
  if(m_pSocket->Creat(1024)){
    if(m_pSocket->Listen())
    return TURE;
    }else
      return FALSE;
  return TURE;
}

  OK,我们做完全部的工作了,也许你要问,我们的这个游戏能够干什么呢?不错,这个游戏的功能实在太简单,也许它能做的唯一的事情就是……赛跑!但是我写这篇教程的目的是为了抛砖引玉,希望大家能够写出更多更精彩的网络游戏来……
分享到:
评论

相关推荐

    VC++6.0实现客户端与服务器端通讯

    本文将详细介绍如何使用VC++6.0这一强大的开发工具来实现客户端与服务器端之间的数据传输。 #### 客户端与服务器端通信的基本原理 客户端/服务器(Client/Server, C/S)模型是一种广泛应用于网络通信中的架构模式。...

    VC++QQ服务器端源代码

    【VC++ QQ服务器端源代码】是一套用于学习和研究即时通讯软件开发的宝贵资源,主要基于Microsoft Visual C++(VC++)编程环境。源代码的提供,让我们有机会深入理解QQ服务器背后的架构和工作原理,这对于想要涉足...

    VC++实现客户端与服务器端的文件传输(TFTP方式)-带窗口

    本文将深入探讨如何使用VC++实现基于TFTP方式的客户端与服务器端文件传输,并结合提供的压缩包文件进行解析。 首先,TFTP协议本身相当简单,它支持两种操作模式:读(Read)和写(Write)。协议基于UDP(User ...

    VC++ TCP服务器程序

    服务器端程序需要监听特定的端口,等待客户端的连接请求。 在VC++中,我们可以使用Winsock库来实现TCP通信。Winsock是Windows操作系统提供的API,用于实现网络通信。首先,我们需要包含相应的头文件`winsock2.h`,...

    vc++ 客户端服务器入门级源码

    本文将深入探讨使用VC++实现客户端服务器通信的基本原理,并通过提供的源码进行详细解析。 首先,客户端-服务器架构是一种分布式计算模型,其中服务器负责处理请求并提供服务,而客户端则发送请求并接收响应。在...

    VC++6.0实现客户端与服务器端通讯

    ### VC++6.0 实现客户端与服务器端通讯的关键知识点 #### 一、研究背景与目标 在现代医疗卫生系统中,高效的信息交换至关重要。通过利用VC++6.0这一编程工具,研究人员旨在实现客户端与服务器端之间的数据通信,...

    VC++编写服务器端接收客户端发送的数字后,进行加法运算并显示

    在本篇文档中,我们将探讨如何使用VC++来开发一个简单的网络程序,该程序由两部分组成:服务器端与客户端。服务器端负责接收来自客户端的两个整型数字,并执行加法运算后将结果返回给客户端;而客户端则负责发送这两...

    基于VC++平台上实现以太网通讯,包括VC-TCP-Server服务器端的实现和VC-TCP-Client客户端的实现源码

    3. **TCP Server**:VC_TCP_Server是实现服务器端程序。在TCP中,服务器首先创建一个监听套接字,然后绑定到特定的IP地址和端口号上,开始监听客户端的连接请求。当有连接请求时,服务器会接受连接并创建一个新的套...

    vc++QQ软件服务器端

    本项目以“vc++QQ软件服务器端”为标题,意在展示如何使用古老的Microsoft Visual C++ 6.0(以下简称VC++)开发QQ的服务器端部分。对于熟悉MFC(Microsoft Foundation Classes)框架的开发者,这个项目将是一次宝贵...

    VC++局域网服务器代码

    这个项目展示了如何使用C++来设计和实现一个能够服务于局域网内客户端请求的服务器端应用。以下是对该知识点的详细说明: 1. **C++编程语言**:C++是一种静态类型的、编译式的、通用的、大小写敏感的、不仅支持过程...

    VC++ 聊天程序(客户端和服务器端)

    在这个项目中,我们将探讨客户端和服务器端的实现,以及在VC++环境中如何利用MFC来创建这样的通信应用。 **客户端**是聊天程序中与用户交互的部分。在MFC中,通常会使用对话框(Dialog)类作为用户界面,用户可以...

    VC++实现网络五指棋源码(客户端和服务器)

    【标题】"VC++实现网络五指棋源码(客户端和服务器)"涉及的主要知识点是使用VC++编程语言,结合Windows Socket API (Winsock) 实现一个基于网络的五指棋游戏。五指棋通常是一种两人对弈的游戏,通过网络连接,玩家...

    VC++ 实现 sip协议

    "VC++实现sip协议"这一主题意味着我们要在VC++环境中构建一个SIP客户端或服务器端应用,以便利用SIP进行网络通信。下面我们将详细探讨如何在VC++中实现SIP协议的相关知识点: 1. **SIP协议基础**:理解SIP的基本...

    VC++ 6.0 TCP 通讯实例(服务器端和客户端)

    服务器端流程: 1、创建套接字(socket)。 2、将套接字绑定到一个本地地址和端口上(bind)。 3、将套接字设为监听模式,准备接收客户请求(listen)。 4、等待客户请求到来;当请求到来后,接受连接请求,返回一...

    VC++的ftp服务器端代码

    在本文中,我们将深入探讨如何使用VC++实现一个FTP服务器端的程序,以及在这个过程中涉及的关键知识点。 首先,VC++(Visual C++)是微软开发的一款集成开发环境,支持C++编程语言。它提供了一个强大的编译器、调试...

    VC++ CSocket编程实现FTP服务器端及客户端(+开发文档)

    简单的VC++ Ftp服务器端及客户端案例 。

    网络聊天室VC++ 客户端和服务器端

    《网络聊天室VC++:构建客户端与服务器端的多线程通信系统》 在IT行业中,网络聊天室是实现即时通讯的重要应用场景,它允许多个用户通过互联网进行实时交流。本项目利用VC++(Visual C++)开发了一款支持多客户端...

    网络五子棋程序用vc++实现

    《网络五子棋程序的VC++实现:深入解析与扩展》 网络五子棋程序的实现,是一项将计算机科学与游戏娱乐相结合的实践项目。在本文中,我们将深入探讨如何利用VC++编程语言,结合Socket通信技术,构建一个功能完善的...

    vc++实现QQ聊天

    本文将深入探讨如何使用VC++实现一个基于TCP协议的QQ聊天应用。首先,我们要理解TCP(传输控制协议)是一种面向连接、可靠的、基于字节流的传输层通信协议,它确保了数据的有序、无损传输。 在标题“VC++实现QQ聊天...

Global site tag (gtag.js) - Google Analytics