开始写网络方面的程序,和我说的一样我要写成封装封装再封装。现在还没用到继承,等继续封状非阻塞模式的时候就要从这个类继承了。从原始的API 写的,没用到MFC所以可以在SDK或者WTL程序中直接用了。
类的方法如下:
首先是初始化
就是WSAStartup我将他写成静态函数是有意义的
调用如下
if( CBTSocket::Init() != RET_SUCCESS )
{
printf("WSAStartup 错误");
return 0;
}
就阻塞的TCP来讲SOCKET可以有3种
第一种是服务器端监听的
可以用如下方法声成
CBTSocket sListen;
sListen.Create();//CREATE有重载
sListen.Bind(9527);//9527为端口号
sListen.Listen();
printf("服务器已在监听状态\n");
CBTSocket sAc;
aaa:
if(sListen.Accept(sAc) != RET_SUCCESS//此处也可以调用sAc.AcceptInit(sListen);
第二种是服务器接受连接的SOCKET
如上,2种方法建立
第三种是客户端的
可以由如下方法建立
CBTSocket s;
s.Create();
if(s.Connect("127.0.0.1", 9527) != RET_SUCCESS)
return 0;
还有其他一些方法自己看代码
至于所有成员函数的返回如下
#define RET_SUCCESS 0x00000000 // 成功
#define RET_BADPARAM 0x00000001 // 参数错误 //此参数通常忽略不会发生
#define RET_WSAERROR 0x00000002 // SOCKET错误 此时候需要调用GETERRNUM来得到错误
#define RET_ERRSOCKET 0x00000003 //SOCKET没有初始化
如果是RET_WSAERROR的话可以调用
GetErrNum()//对应WSAGetLastError
GetErrDes(char *szErrDes)
得到错误号
程序很多地方考虑到了释放,希望大家喜欢,作为我重构积累计划第一个放出的代码,可能还有很多潜在错误
希望大家发现后可以把改过的发给我一份谢谢。
程序下载地址www.lwkl.net/CBTSocket.rar
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////