VC++下实现 Socket 编程方法
利用 Socket 编程是一类典型的网络通信程序,特别是在实时性要求比较高
的项目中,Winsock 编程方法是非常实用的。下面介绍在 VC 6.0 环境下开发
Winsock 程序的方法。
这里并没有直接应用 MFC 提供的 CSocket 类,这是因为考虑到对于类而
言,其成员函数调用必然是完全阻塞方式的,因此只能用于人工线程中。基于
这种思想,可以在 CObject 类基础上派生一个套接字类,其使用方式为阻塞方
式,虽然增加了使用的条件,但可以保证其正常工作,而不会出现不加控制地
使用 CSocket 对象带来的冲突现象。
下面首先将具体介绍有关的套接字类的定义,新创建的套接字功能主要通过
调用 CSocket 的相关操作实现。
1 套接字类 CBlockingSocket
首先需要定义此套接字类,在类中设置了一个属性变量:SOCKET
m_hSocket; m_hSocket 表示套接字的句柄。另外还构造了一组方法,其功
能与 CSocket 类是对应的,下面以创建、监听、连接建立和消息的接收和发送
为例,介绍其实现方法,。
创建
创建套接字即要求创建相应的连接,缺省类型为面向连接的流,具体实现为:
void CBlockingSocket::Create(int nType){
ASSERT(m_hSocket == NULL);
if((m_hSocket = socket(AF_INET, nType, 0)) ==
INVALID_SOCKET) {
throw new CBlockingSocketException("创建套接字"); }
}
监听
Listen 函数完成监听连接的任务,在实现时要求最多有 10 个连接请求排队,
这在一般的应用中是完全足够的。
void CBlockingSocket::Listen(){
ASSERT(m_hSocket != NULL);
if(listen(m_hSocket, 10) == SOCKET_ERROR) {
throw new CBlockingSocketException("Listen"); }
}
建立连接
连接的实际建立可以由 Connect 实现,同样地,缺省的建立方式为面向连
接的流。
void CBlockingSocket::Create(int nType ){
ASSERT(m_hSocket == NULL);
评论1