CSocket服务器

我的理解:把服务器和客户端的交互工程比喻成外来人员访问公司,每来一个客户端访问,需要服务器的前台经理接待此客户,然后前台经理呼叫一个接待员来将客户带上楼。服务器的两个角色前台经理和接待员就是服务器的两个CSocket对象。

1、需要生成两个类对象,一个用来监听客户的访问,一个用来接待客户。

  在类向导中新建类名:CSockL和CSockC,重写CSockL的OnAccept函数和CSockC的OnReceive函数:

  (1)、

    void CSockL::OnAccept(int nErrorCode)
    {//有客户连接,就回调此函数
    // TODO: 在此添加专用代码和/或调用基类
    CSockC *p=new CSockC;//每有一个访问,就生成一个CSockC对象指针
    this->Accept(*p);
    //p->GetPeerName()可以用来获取刚刚连接的客户端ip和端口
    CSocket::OnAccept(nErrorCode);
    }

  (2)、

    void CSockC::OnReceive(int nErrorCode)
    {//有客户发送消息,就回调
    // TODO: 在此添加专用代码和/或调用基类
    char rcv[100];//装从客户端传来的数据
    int rcvLenth=Receive(rcv,sizeof(rcv));//核心处
    rcv[rcvLenth]=0;//消除乱码
    CString ipAddrss;//装发送消息的客户端ip地址
    UINT ipPort;//装端口
    int result=GetPeerName(ipAddrss,ipPort);//获取发送消息客户端的ip和端口

    CTestCSoketServerDlg *p=(CTestCSoketServerDlg*)AfxGetMainWnd();//获取主窗口类指针
    p->ShowInfo(rcv,ipAddrss,ipPort);//调用主窗口类指针的显示函数
    CSocket::OnReceive(nErrorCode);
    }

2、现在已经得到一个我自己定义的类CSockL:CSocket,在Dlg.h中声明一个CSockL的对象,在Dlg.cpp中的打开服务器button中定义

  if(!m_sockl.Create(8080))
  {
  AfxMessageBox(CString("创建套接字失败"));
  return;
  }
  m_sockl.Listen();

3、如果需要从服务器传数据到客户端

  这时所有的客户端都长连接在了服务器上面,在Accept中可以得到这些客户端的ip,所以只要有ip就可以用sendto来发送了。

时间: 2024-10-14 16:51:42

CSocket服务器的相关文章

用Socket来简单实现IIS服务器

刚刚接触ASP.NET编程,为了更好的屡清楚服务器的处理过程,就用Socket模拟服务器来处理请求.用Socket来模拟服务器的时候,同样是自己来封装一些对应的类文件.包括 HttpRequest.HttpResponse.HttpContext.HttpApplication.IHttpHandel.主要的执行流程是:先用Socket来创建一个简单的服务器,进行监听,当监听到请求后将请求交给处理程序去处理,应用程序中根据请求的是静态资源还是动态资源做出不同的处理.然后通过Socket对象将响应

VC FTP服务器程序分析(四)

下面是数据传输的重点-CDataSocket类,函数不多,都比较重要. 1.OnAccept  数据tcp服务器被连接的虚函数,由框架调用. 1 void CDataSocket::OnAccept(int nErrorCode) 2 { 3 // Accept the connection using a temp CSocket object. 4 CAsyncSocket tmpSocket; 5 Accept(tmpSocket); 6 7 SOCKET socket = tmpSock

VC FTP服务器程序分析(二)

上面讲到了CClientThread类,打开这个类的实现,这个类实现了4个函数.依次分析: 1.InitInstance   其说明如下:InitInstance必须被重载以初始化每个用户界面线程的新实例.统称,你重载InitInstance函数来执行当线程首次被创建时必须完成的任务.此成员函数仅在用户界面线程中使用. 1 BOOL CClientThread::InitInstance() 2 { 3 // Attach the socket handle to a CSocket objec

CSocket

2015-1-26 flyfish 继承关系 class CSocket : public CAsyncSocket class CAsyncSocket : public CObject class CSocketWnd : public CWnd TCP服务器流程 socket() bind() listen() accept() receive() / send() close() CSocket::Create 调用的是父类CAsyncSocket::Create,Create函数中调用

MFC CSocket和CAsyncSocket的连接

MFC CSocket和CAsyncSocket的连接 flyfish 2015-1-31 CSocket的Connect是阻塞的. 所以代码类似 if(!Connect()) { } 判断成功还是失败 CAsyncSocket的Connect是非阻塞的 当调用CAsyncSocket::Connect连接一个服务器 虽然CAsyncSocket::Connect函数返回值是BOOL类型, 但代码不是 if(!Connect()) { } 当连接操作完成,完成(complete)!=成功(suc

小白基于Csocket的局域网聊天文件传输软件C/S模式

首先,并不建议大家用Csocket,经验之谈,CAsyncSocket基础上派生的一个同步阻塞Socket的封装类,也就是说编程的过程很多麻烦,但是我坚持下来了.....好烦.... .................................................分割线..................................................................................... 思想其实很容易理解,S(服务器端)创建s

MFC下CSocket编程详解

MFC下CSocket编程详解 分类: C/C++2008-03-13 09:01 34465人阅读 评论(34) 收藏 举报 mfc编程socket服务器socketsstream MFC下CSocket编程详解: 1. 常用的函数和注意事项(详细的函数接口说明请查看MSDN): CSocket::Create 初始化(一般写服务器程序都不要用为好,用下面的 CSocket::Socket 初始化) CSocket::Socket初始化 CSocket::SetSockOpt 设置socket

对CSocket类使用的理解

今天看了本书上的例程,做的是局域网聊天工具,用的Socket知识.前面介绍了Socket相关的函数,这些之前都了解.不过真正实现的时候却是用了封装的CSocket类,然后绕来绕去感觉一头雾水,花了好长时间研究了它的代码. 首先它的主类继承自CSocket类,然后注意到重载了三个函数: virtual void OnReceive(); //接收到数据 virtual void OnClose(); //关闭 virtual void OnAccept(); //接收新用户 然后在这三个重载的函数

基于CSOCKET的Client简单实例(转)

原文转自 http://blog.csdn.net/badagougou/article/details/78410382 第一步:创建一个基类为CSOCKET类的新类,Cclient,并在主对话框类创建对象Cclient client1 第二步:创建并连接服务器,注意IP地址和端口号要匹配服务器 在主对话框OnInitDialog()里调用. // TODO: 在此添加额外的初始化代码 client1.Create(); client1.Connect(_T("192.168.42.87&qu