这是一个适宜于windows与linux双环境编译的包。当然其中有些地方需要编译前手工调换。下面以linux环境为主进行解析。
预备的一些格式。这里为了适用于不同环境编译。大量使用了类似以下结构的预编译形式:
很显然,能在跨平台编译的原因就在这里。
接下来就是我们需要解析并理解的实例代码。
首先:
全局参数表
shpp.h
这里的亮点在于头文件由编译系统环境的不同而选择不同。
KNSocket.h
这里我们可以看到KNSocket的整个结构
- enum KN_ERROR为错误返回枚举类型。
- class CSockAddr为socket地址操作类。
- CSockAddr()默认空地址指针初始化。
- CSockAddr(sockaddr_in &sin)直接赋予sockaddr_in值初始化。
- CSockAddr(const long ulAddr, const UInt16 ushPort = 0)赋予字符与数字参数入参转变初始化。
- char* DottedDecimal()正如函数名将网间传输所用addr转化为可打印输出的常见网址格式字符串。
- UInt16 Port() const将网间传输的端口转化为主机字节形式。
- UInt32 IPAddr() const将网间传输的ip地址值转化为主机字节
- CSockAddr& operator=(const sockaddr_in& sin)
LPCSOCKADDR GetLpSockaddr()
operator LPCSOCKADDR() 这三个都是为了高效的将sockaddr_in转化为sockaddr而准备的。
- class CKNSocket当然为结构主体了
- #ifdef _WIN32
static int InitSocket();
static int ExitSocket();
#endif 当windows环境下时的socket初始化和退出函数。 - CKNSocket();初始化令m_hSocket为0。
- void Cleanup();关闭m_hSocket指示socket链接(如果存在)并将其値重置为0.没有返回值。
- int Create(int nType = SOCK_STREAM);在m_hSocket建立通讯用末端点。
- int Close();关闭m_hSocket指示socket链接(如果存在)并将其値重置为0.正常关闭或者已经关闭返回值为0。
- int Bind(LPCSOCKADDR psa);给m_hSocket绑定psa。
- int Listen(UInt32 nQlen = 5);监听端口。
- int Connect(LPCSOCKADDR psa);与psa所提供网间网址链接。
- int Accept(CKNSocket& s, LPCSOCKADDR psa);将psa联系到s->m_hSocket。
- int Send(const char* pch, const int nSize, const int nSecs);将pch中的字符串按nSize大小在nSecs微妙内发送到发送缓冲中。
- int Write(const char* pch, const int nSize, const int nSecs);将pch内总大小为nSize的内容在nSecs秒内拷贝到发送缓冲中。
- int Receive(char* pch, const int nSize, const int nUSecs);
- int SendDatagram(const char* pch, const int nSize, LPCSOCKADDR psa, const int nSecs = 10 );
- int ReceiveDatagram(char* pch, const int nSize, LPCSOCKADDR psa, const int nSecs = 10);
- int GetPeerAddr(LPCSOCKADDR psa);
- int GetSockAddr(LPCSOCKADDR psa);
- int GetSockAddr(char *chIPAddr);
- operator SOCKET()
- #ifdef _WIN32