VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

有编程疑问吗?还请到提问专区发帖提问!
搜索
查看: 276|回复: 0

VC++高级班之网络编程篇-[3]CServer类的封装

[复制链接]
01_avatar_middle
online_admins admin 发表于 2018-4-2 23:52:30 | 显示全部楼层 |阅读模式
①、相关函数代码:
  1. UINT CServer::acceptProc(LPVOID pParam)
  2. {
  3.         CServer *pThis = (CServer *)pParam;

  4.         pThis->m_ListenSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  5.         if (pThis->m_ListenSock == INVALID_SOCKET) {
  6.                 AfxMessageBox(_T("创建监听Socket失败!"));
  7.                 return FALSE;
  8.         }
  9.         sockaddr_in sServer = {0};
  10.         sServer.sin_family = AF_INET;
  11.         sServer.sin_addr.s_addr = htonl(INADDR_ANY);
  12.         sServer.sin_port = htons(pThis->m_nPort);
  13.         if (bind(pThis->m_ListenSock, (sockaddr *)&sServer, sizeof(sServer)) == SOCKET_ERROR) {
  14.                 AfxMessageBox(_T("端口绑定失败!"));
  15.                 return FALSE;
  16.         }

  17.         if (listen(pThis->m_ListenSock, SOMAXCONN) == SOCKET_ERROR) {
  18.                 AfxMessageBox(_T("端口监听失败!"));
  19.                 return FALSE;
  20.         }

  21.         sockaddr_in clientAddr = {0};
  22.         int iLen = sizeof(sockaddr_in);
  23.         SOCKET accSock = accept(pThis->m_ListenSock, (sockaddr *)&clientAddr , &iLen);
  24.         if (accSock == INVALID_SOCKET) {
  25.                 continue;
  26.         }
  27.        
  28.         ////其他代码;

  29.         return TRUE;
  30. }
复制代码

===================================================
②、Socket函数讲解:
  1. SOCKET WSAAPI socket(
  2.   _In_  int af, //地址描述
  3.   _In_  int type, //套接字类型
  4.   _In_  int protocol //协议类型
  5. );
复制代码
  1. int bind(
  2.   _In_  SOCKET s, //套接字句柄
  3.   _In_  const struct sockaddr *name, //要关联的本地地址
  4.   _In_  int namelen //地址的长度
  5. );
复制代码

  1. int listen(
  2.   _In_  SOCKET s, //套接字句柄
  3.   _In_  int backlog //监听队列中允许保持的尚未处理的最大连接数量
  4. );
复制代码

  1. SOCKET accept(
  2.   _In_     SOCKET s, //套接字句柄
  3.   _Out_    struct sockaddr *addr, //一个指向 sockaddr_in 结构的指针,用于取得对方的地址信息
  4.   _Inout_  int *addrlen //一个指向地址长度的指针
  5. );
复制代码


===================================================
===================================================

※※※ 小作业:
①、程序中为什么不适用MessageBox,而用了 AfxMessageBox?
②、使用 select 函数对accept做异步处理,让其不是一直卡死在那。
自己直接使用也好,封装也好,只要实现功能就可以,相关代码公布在【Vip专享资料区】。
------------------------------------- End -------------------------------------------

相关课程演示细节还请观看视频教程!
本套教程由VC驿站原创,提供视频教程+售后答疑服务!
VC驿站Vip会员售后答疑截图【持续更新】:http://www.cctry.com/thread-288054-1-1.html
教程介绍及详情请见:http://www.cctry.com/static/vip/index.html
VC驿站Vip会员详情请见:http://www.cctry.com/static/vip/index.html





上一篇:VC++高级班之网络编程篇-[2]通用Socket函数及CServer类的封装
下一篇:VC++高级班之网络编程篇-[4]客户端队列管理及自定义协议

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /1 下一条

QQ
QQ在线咨询
联系电话
13591366679
手机扫一扫 关注本站精彩内容
wxqrcode

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2018-10-22 19:13

Powered by Discuz! X3.4

© 2009-2018 cctry.com

快速回复 返回顶部 返回列表