• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > C++之WSAAsyncSelect模型实例

C++之WSAAsyncSelect模型实例

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了wsaasyncselect模型,wsaasyncselect,mfc wsaasyncselect,c++串口通信实例,c++程序实例等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

本文实例讲述了C++中WSAAsyncSelect模型的用法。分享给大家供大家参考。具体实现方法如下:

TCPServer.cpp源文件如下:

#include "resource.h" 
 
#define WM_SOCKET WM_USER+1 
 
CMyApp theApp; 
 
BOOL CMyApp::InitInstance() 
{ 
    //初始化套接字 
    WSADATA wsaData; 
    WORD wVersionRequested = MAKEWORD(2,0); 
    ::WSAStartup(wVersionRequested, &wsaData); 
    //显示对话框 
    CMainDialog dlg; 
    m_pMainWnd = &dlg; 
    dlg.DoModal(); 
    //释放套接字 
    ::WSACleanup(); 
    return FALSE; 
} 
 
//CMainDialog 
CMainDialog::CMainDialog(CWnd* pParentWnd):CDialog(IDD_MAINDIALOG,pParentWnd) 
{ 
 
} 
BEGIN_MESSAGE_MAP(CMainDialog, CDialog) 
ON_BN_CLICKED(IDC_START, OnStart) 
ON_BN_CLICKED(IDC_CLEAR, OnClear) 
ON_MESSAGE(WM_SOCKET, OnSocket) 
END_MESSAGE_MAP() 
 
void CMainDialog::OnCancel() 
{ 
    this->CloseAllSocket(); 
    CDialog::OnCancel(); 
} 
 
BOOL CMainDialog::OnInitDialog() 
{ 
    CDialog::OnInitDialog(); 
 
    //设置图标 
    SetIcon(theApp.LoadIconA(IDI_MAIN), FALSE); 
 
    //创建状态栏并设置其属性 
    m_bar.Create(WS_CHILD|WS_VISIBLE|SBS_SIZEGRIP, CRect(0,0,0,0), this, 101); 
    m_bar.SetBkColor(RGB(0xa6, 0xca, 0xfa)); 
    int arWidth[]={200,-1}; 
    m_bar.SetParts(2, arWidth); 
    m_bar.SetText("windows程序设计", 1, 0); 
    m_bar.SetText("空闲", 0, 0); 
    //关联列表控件 
    m_listInfo.SubclassDlgItem(IDC_LIST, this); 
 
    //初始化套接字和连接列表 
    m_socket = INVALID_SOCKET; 
    m_nClient = 0; 
 
    //取得本机IP,在状态栏中显示 
    char szHostName[MAX_PATH] = {0}; 
    ::gethostname(szHostName, MAX_PATH); 
    hostent *pHost = gethostbyname(szHostName); 
    if (pHost != NULL) 
    { 
        CString strIP; 
        in_addr* addr = (in_addr*)*pHost->h_addr_list; 
        strIP.Format("本机IP:%s",inet_ntoa(addr[0])); 
        m_bar.SetText(strIP, 0, 0); 
    } 
    return TRUE; 
} 
 
BOOL CMainDialog::CreateAndListen(int nPort) 
{ 
    if (m_socket == INVALID_SOCKET) 
    { 
        ::closesocket(m_socket); 
    } 
    //创建套接字 
    m_socket = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); 
    if (m_socket == INVALID_SOCKET) 
    { 
        return FALSE; 
    } 
    //绑定端口 
    sockaddr_in sin; 
    sin.sin_family = AF_INET; 
    sin.sin_port = htons(nPort); 
    //sin.sin_addr.S_un.S_addr = INADDR_ANY; 
    sin.sin_addr.s_addr = INADDR_ANY; 
    int nErr = GetLastError(); 
    if (::bind(m_socket, (sockaddr*)&sin, sizeof(sin)) == SOCKET_ERROR) 
    { 
        nErr = GetLastError(); 
        return FALSE; 
    } 
    ::WSAAsyncSelect(m_socket, m_hWnd, WM_SOCKET, FD_ACCEPT|FD_CLOSE|FD_READ); 
 
    //进入监听模式 
    ::listen(m_socket, 5); 
 
    return TRUE; 
} 
 
BOOL CMainDialog::AddClient(SOCKET s) 
{ 
     
    if (m_nClient < MAX_SOCKET) 
    { 
        m_arClient[m_nClient++] = s; 
        return TRUE; 
    } 
    return FALSE; 
     
} 
 
void CMainDialog::RemoveClient(SOCKET s) 
{ 
    BOOL bFound = FALSE; 
    int i; 
    for (i=0;i<m_nClient;i++) 
    { 
        if (m_arClient[i] == s) 
        { 
            bFound = TRUE; 
            break; 
        } 
    } 
 
    //找到 
    if (bFound) 
    { 
        m_nClient--; 
        for (int j=i;j<m_nClient;j++) 
        { 
            m_arClient[j] = m_arClient[j+1]; 
        } 
    } 
} 
void CMainDialog::CloseAllSocket() 
{ 
    if (m_socket != INVALID_SOCKET) 
    { 
        ::closesocket(m_socket); 
        m_socket = INVALID_SOCKET; 
    } 
    for (int i=0;i<m_nClient;i++) 
    { 
        ::closesocket(m_arClient[i]); 
    } 
    m_nClient = 0; 
} 
 
void CMainDialog::OnStart() 
{ 
    if (m_socket == INVALID_SOCKET) //开启服

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C++之WSAAsyncSelect模型实例

相关文章

  • 2017-05-28VC中实现GB2312、BIG5、Unicode编码转换的方法
  • 2017-05-28C++基于CreateToolhelp32Snapshot获取系统进程实例
  • 2017-05-28获取一个文件行数的方法
  • 2017-05-28C++中的delete不会将操作数置0
  • 2017-05-28简单总结C++中指针常量与常量指针的区别
  • 2017-05-28数据结构之位图(bitmap)详解
  • 2017-05-28C++动态分配和撤销内存以及结构体类型作为函数参数
  • 2017-05-28C语言 常量详解及示例代码
  • 2017-05-28C语言 存储类详解及示例代码
  • 2017-05-28浅谈C++的浅拷贝出现的错误

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • c++ 构造函数的初始化列表
    • C++设计模式之命令模式
    • 自己实现strcpy函数的实现方法
    • c语言 字符串转大写的简单实例
    • C++中的多态与虚函数的内部实现方法
    • 详解C++中的函数调用和下标以及成员访问运算符的重载
    • 弦图ZOJ 1015 Fishing Net 判定方法
    • php调用c++的方法
    • c++ std::invalid_argument应用
    • 解析C语言中位字段内存分配的问题

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有