对于socket的编程,一直希望能够写一个很好用的封装好了的类。但是,却发现因需求的改变,导致总是封装好的socket无法下次再使用。近几天,又折腾了下socket,故将想到的整理如下。
该文主要是针对一些资料的整理(个人没那个能力封装好比他们更好的类)。而且到现在为止,也没完全整理出一个比较有实用性的资源。该文主要涉及如下:
(1)对封装类Socket的感受。
(2)对封装类TcpTran的感受。
(3)对Socket接收函数的一个整理。
(4)对Socket协议封装的一个整理。
一、对封装类Socket的感受
2、考虑到希望保存网页,其该代码会在后面列出。
3、感受
该类我相信应该是封装的很好的,其主要应该是针对HTTP(我的理解)。但是我的项目是一个基于服务端、客户端传输(基于directshow的音视频聊天系统),然后秉着既然敢开源应该也牛B的想法,直接用。但是用的时候,却发现如下为难的地方:
(1)其初始化在构造函数中,如果我想实例化类socket(写了一个SocketManager对socket进行管理),却发现我无法不知道该如何实例化一个全局的socket类实例,因为Socket socket是带参的构造函数,虽然可以在使用的时候实例化,但是如果实例化一个SOCKET当做类SocketManager一个全局的成员变量使用的时候,却只能在SocketManager.h中定义一个Socket*(我定义了一个void*,然后void *pSocket = (void*)&socket这样转换)的变量。因socket无法在构造函数中实例化,使得我必须找到第一个使用它的地方对pSocket进行初始化。
(2)如果针对发送的数据是char *的,其我感觉好像还需要自己加一个Send和Recv函数。不知道怎么处理成string,也没明白,其代码为什么要处理成string,没有去仔细深究。
二、对封装类TcpTran的感受
1、该类链接:资源
2、代码
// TcpTran.cpp: implementation of the TcpTran class.
//
//
#include "stdafx.h"
#include "TcpTran.h"
#pragma region TcpTran类
/
//类名:TcpTran
//功能:完成TCP通信
/
//构造函数
TcpTran::TcpTran()
{
//将套接字初始化为无效
m_Socket = INVALID_SOCKET;
}
//析构函数
TcpTran::~TcpTran(){}
#pragma endregion
#pragma region InitSocketLib函数
/
//函数名:TcpTran
//功能:初始化SOCKET通信库,要求Winsockt 2
//参数:lowver版本的低位;higver版本的高位
//返回值:TRUE表示成功,FALSE表示失败
/
BOOL TcpTran::InitSocketLib(int lowver,int higver )
{
WORD wVersion =0 ;
int errret = -1;
WSADATA wsaData;
wVersion = MAKEWORD(lowver,higver);
errret &