C++ socket

SOCKET 常用选项:

http://blog.csdn.net/gdutliuyun827/article/details/17467321

MFC Socket 类

原文地址:http://blog.csdn.net/by_mxy/article/details/17193057
为了方便开发人员轻松开发网络应用程序,Visual C++MFC提供了相应的Socket类库,
主要包括 CAsyncSocket 类、CSocket 类和 CSocketFile 类。
10.5.1  CAsyncSocket 类
CAsyncSocket 对象表示一个 Windows Socket,用于表示网络通信。CAsyncSocket 类封
装了 Windows Sockets API,使用面向对象技术,方便与 MFC 其他类库一起编程。
1.创建 CAsyncSocket 对象
创建 CAsyncSocket 对象分为两步:首先调用构造函数创建一个空白的 Socket 对象,
然后调用 Create 成员函数创建 SOCKET 数据结构并绑定地址。要注意的是,在服务器端应第 10 章  多线程与网络编程初步  ·283·
·283·
用程序的接受请求处理函数中,侦听 Socket 创建一个通信 Socket 时,无须再调用 Create( )
函数。
Create 函数原型为
BOOL Create(UINT nSocketPort=0,int nSocketType=SOCK_STREAM,long lEvent 
       =FD_READ|FD_WRITE|FD_OOB|FD_ACCEPT|FD_CONNECT|FD_CLOSE, 
       LPCTSTR  lpszSocketAddress=NULL); 
其中,参数 nSocketPort 用于指定分配给 Socket 的端口号,默认为 0,表示由系统自动
分配;参数 nSocketType 默认值为流式 Socket;参数 lEvent 为位屏蔽码,指定将为应用程
序生成通知的事件集合,默认情况下所有事件都会通知;参数 lpszSocketAddress 为绑定地
址,既可以设定计算机名,也可以设定 IP 地址,还可以是 DNS 地址,默认为本机地址。
该函数如果调用成功,则返回 TRUE;否则返回 FALSE。应用程序可以通过调用
GetLastError 函数获取错误描述。
创建一个 Socket 之后,需调用 bind 成员函数将 Socket 与一个本地地址绑定。对于服
务器端侦听 Socket 在接受客户端连接请求前必须选择一个端口号并绑定。
2.虚拟成员函数
为支持 lEvent 所代表的通知事件,MFC 通过提供虚拟成员函数轻松实现编程。例如网
络应用程序要处理 FD_ACCEPT 事件,只需重载 OnAccept 函数即可。
(1) OnAccept:对应于 FD_ACCEPT,表示一个新的连接请求等待被接受。通过调用
Accept 成员函数对客户端的连接请求进行响应。
(2) OnClose:对应于 FD_CLOSE,表示 Socket 已关闭。
(3) OnConnect:对应于 FD_CONNECT,表示 Socket 连接已完成,不论成功与否。它
在 Connect 成员函数被调用之后才被调用。
(4) OnOutOfBandData:对应于 FD_OOB,表示接收到带外数据,该数据通常为紧急
数据。
(5) OnReceive:对应于 FD_READ,表示接收到新的数据,等待被装入。通过调用 Receive
成员函数接收数据。
(6) OnSend:对应于 FD_WRITE,表示数据已准备好以进行发送。通过调用 Send 成员
函数发送数据。
3.建立连接
与 Windows Sockets API 创建网络应用程序相同,创建并绑定一个 Socket 之后,就需
要建立客户端与服务器之间的连接。
(1)  客户端
对于流式 Socket 客户端,使用 Connect 成员函数提出连接请求。它有以下两种函数
原型。
BOOL  Connect(LPCTSTR  lpszHostAddress,UINT nHostPort); 
BOOL  Connect(const  SOCKADDR *lpSockAddr,int nSockAddrLen); 
其中,第一种形式的 Connect 函数参数 lpszHostAddress 为绑定地址,它是一个 ASCII·284· Visual C++程序设计教程与上机指导
·284·
字符串,例如“sunzhiyue、122.1.6.20、ftp.microsoft.com”,参数 nHostPort 为端口号。第
二种形式的 Connect 函数参数与 Windows Sockets API 的 connect 函数含义相同。
该函数如果调用成功,则返回 TRUE;否则返回 FALSE。应用程序可以通过调用
GetLastError 函数以获取错误描述。
(2)  服务器端
当服务器端创建并绑定侦听 Socket 之后,就应调用 Listen 成员函数开始侦听客户端连
接请求。当接收到客户端请求后,调用 Accept 成员函数响应请求。Accept 函数通常在
OnAccept 虚拟成员函数中调用。
Accept 函数执行成功,将返回一个用于与客户端进行通信的 Socket。
4.收发数据
一旦客户端与服务器成功建立 Socket 连接后,就可以进行相互通信。MFC 提供了 4
个成员函数用于收发数据。
(1) Receive:从 Socket 接收到数据。
(2) ReceiveFrom:接收到一个数据报,并存储原地址。
(3) Send:向一个 Socket 发送数据。
(4) SendTo:向一个指定目的地发送数据。
5.关闭 Socket 
当 Socket 使用结束之后,就应该关闭 Socket。
(1) ShutDown:禁止发送/接收数据。
(2) Close:关闭 Socket。
10.5.2  CSocket 类
CSocket 类是 CAsyncSocket 类的派生类,它继承了 CAsyncSocket 对 Windows Sockets 
API 的封装。与 CAsyncSocket 对象相比,CSocket 对象代表了 Windows Sockets API 的更高
一级的抽象化,自动为应用程序处理阻塞调用。CSocket 与类 CSocketFile 和 CArchive 一起
来管理对数据的发送和接收。
与 CAsyncSocket 类相同,要创建一个 CSocket 对象,首先需要调用构造函数,然后调
用 Create 成员函数创建。使用 CSocket 类实现客户端和服务器端建立 Socket 连接,以及数
据收发过程,与 CAsyncSocket 类类似,不同之处如下。
(1) CSocket 对象不再调用通知函数 OnConnect,仅仅调用 Connect 成员函数。但是调
用 Connect 函数时会发生阻塞,直到成功地建立了连接或有错误发生。调用 Connect 函数
的线程在 Connect 函数发生阻塞时仍能处理 Windows 的其他消息。
(2)    CSocket 对象不再调用通知函数 OnSend,仅仅调用 Send 成员函数。但是调用 Send
函数时会发生阻塞,直到所有数据都发送完毕。调用 Send 函数的线程在 Send 函数发生阻
塞时仍能处理 Windows 的其他消息。
(3)  由 于 CSocket 类 是 CAsyncSocket 类 的 派 生  类 , 因 此 CSocket 对 象 也 能 使 用
Receive/Send 和 ReceiveFrom/SendTo 收发数据。除此之外,CSocket 对象可以和 CSocketFile
对象一起使用串行化方法收发数据。

 

WSAEventSelect机制

http://blog.csdn.net/ithzhang/article/details/8476556

 

socket相关函数详解:

http://blog.csdn.net/ZHANG2012LIANG/article/details/9624903

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值