三个文件:socket_include.h 、socket.h 、socket.cpp;
//socket_include.h
#ifndef _SOCKETS_socket_include_H
#define _SOCKETS_socket_include_H
#define _SOCKETS_socket_include_H
// class WSAInitializer is a part of the Socket class (on win32)
// as a static instance - so whenever an application uses a Socket,
// winsock is initialized
class WSAInitializer // Winsock Initializer
{
public:
WSAInitializer() {
if (WSAStartup(0x101,&m_wsadata))
{
exit(-1);
}
}
~WSAInitializer() {
WSACleanup();
}
private:
WSADATA m_wsadata;
};
// as a static instance - so whenever an application uses a Socket,
// winsock is initialized
class WSAInitializer // Winsock Initializer
{
public:
WSAInitializer() {
if (WSAStartup(0x101,&m_wsadata))
{
exit(-1);
}
}
~WSAInitializer() {
WSACleanup();
}
private:
WSADATA m_wsadata;
};
//Socket.h
#ifndef _SOCKETS_Socket_H
#define _SOCKETS_Socket_H
#define _SOCKETS_Socket_H
#include "socket_include.h"
class Socket
{
..............
{
..............
#ifdef _WIN32
static WSAInitializer m_winsock_init; //< Winsock initialization singleton class
#endif
static WSAInitializer m_winsock_init; //< Winsock initialization singleton class
#endif
..............
}
//Socket.cpp
#include "Socket.h"
// statics
#ifdef _WIN32
WSAInitializer Socket::m_winsock_init;
#endif
#ifdef _WIN32
WSAInitializer Socket::m_winsock_init;
#endif
通过在Socket.h中声明
static WSAInitializer m_winsock_init
把类WSAInitializer实现单例模式!
本文介绍了如何使用C++在Win32平台上实现Socket类,并通过WSAInitializer类确保Winsock仅被初始化一次。该设计利用了单例模式来管理Winsock的生命周期。
1525

被折叠的 条评论
为什么被折叠?



