重构,从底层包装一个组socket阻塞TCP

开始写网络方面的程序,和我说的一样我要写成封装封装再封装。现在还没用到继承,等继续封状非阻塞模式的时候就要从这个类继承了。从原始的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

/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
当涉及到重构时,一个常见的例子是将重复的代码提取为一个可复用的方法或函数。下面是一个简单的Java重构示例,假设我们有以下代码: ```java public class Calculator { public int add(int a, int b) { int result = a + b; System.out.println("The sum of " + a + " and " + b + " is " + result); return result; } public int subtract(int a, int b) { int result = a - b; System.out.println("The difference between " + a + " and " + b + " is " + result); return result; } public int multiply(int a, int b) { int result = a * b; System.out.println("The product of " + a + " and " + b + " is " + result); return result; } public int divide(int a, int b) { int result = a / b; System.out.println("The quotient of " + a + " divided by " + b + " is " + result); return result; } } ``` 在这个示例中,我们可以看到四个方法(add, subtract, multiply, divide)中存在重复的打印语句。为了更好地组织代码并避免重复,我们可以进行重构。下面是重构后的示例: ```java public class Calculator { public int add(int a, int b) { int result = a + b; printOperation("sum", a, b, result); return result; } public int subtract(int a, int b) { int result = a - b; printOperation("difference", a, b, result); return result; } public int multiply(int a, int b) { int result = a * b; printOperation("product", a, b, result); return result; } public int divide(int a, int b) { int result = a / b; printOperation("quotient", a, b, result); return result; } private void printOperation(String operation, int a, int b, int result) { System.out.println("The " + operation + " of " + a + " and " + b + " is " + result); } } ``` 在重构后的代码中,我们将重复的打印语句提取到了一个私有方法`printOperation`中,通过传递不同的操作名称和计算结果,可以在不同的方法中调用该方法来打印对应的结果。这样可以提高代码的可读性和可维护性,并避免了代码的重复编写。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值