⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 d074.bmp.txt

📁 Visual C++通信编程实例
💻 TXT
字号:
为了便于代码重用,新建一个通用类CServer,封装了服务器的所有操作。声明代码如
#include "winsock.h"
class CServer
{
public:
CServer();
          virtual ~CServer();
public:
           BOOL InitAndListen(HWND hwnd, UINT port);
public:
        SOCKET m_hSocket;
       sockaddr_in m_addr;
        UINT m_uPort;
      HWND m_hWnd;
};
    其中,m_hSocket为SOCKET的句柄,指向创建好的SOCKET; m_addr为服务器地址,
为sockaddrjn结构体变量;m_hWnd为窗口句柄,作为WSAAsyncSelect0函数定义的消息
的窗口的句柄;m_uPort为一个无符号整型,作为IP地址变量。
    CServer类的构造函数将rIl_-hSocket清空,而析构函数—CServer()则调用WSAAsyncSelect()
将InitAndListen()函数内调用该函数设置的几个Socket事件还原为阻塞方式。详细代码见随
书光盘“Chapter 3\Example 4\”。
    该类最重要的函数是hutAndListen0豳数,该函数完成如下功能:
    1) socket0函数创建一个Socket,并将其赋给m_hSocket。
    2)用WSAAsyncSelect0函数在接受、读准备好、写准备好或者关闭时接到通知,实现
这些事件的非阻塞异步处理机制,参数SER_MESSAGE是一个自定义的消息,需要在对应
的窗口编制该消息的响应处理函数,详见CChatRoomDlg内的OnServerMessage(WPARAM
wParam,LPARAM lParam)函数。
    3)用bind0函数绑定一个套接字到本机的地址,其中AF_INET表示本机的任意一个地
址都可以接收Socket消息。这样,就完成了Socket的基本初始化。
    4)用listen()函数开始侦听,等待客户的连接,该函数的第二个参数表示Socket能连接
的最多的客户机的个数。
    请读者注意,由于采用了WSAAsyncSelect0函数,所以在这里可以不必采用多线程连接,
而在Socket对应的窗口内编制一个消息处理函数,完成多个客户机的Socket的连接响应过
程。详细代码如下:
BOOL CServer::InitAndListen(HWND hwnd,  UINT port)
{
m_uPorkport;
 '  m_hWnd=hwnd;
       if(m_hSocket != NULL)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -