吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2469|回复: 7
收起左侧

[C&C++ 转载] VC6简单封装TCP客户端

  [复制链接]
lichunfeng 发表于 2020-4-7 23:51
本帖最后由 lichunfeng 于 2020-4-8 00:03 编辑

         由于写补丁经常使用VC6,偶尔会用到访问服务器返回一些东西,便自己封装了一个简单的TCP客户端,具体见代码。
代码应该存在BUG,以及不足,希望大家可以指正出来。


#include <WinSock2.h>
#pragma comment(lib, "ws2_32.lib")  //加载 ws2_32.dll
class ClintTcp
{
public:
        ClintTcp();//构造函数
        ~ClintTcp();//析构函数
        BOOL MyConnet(const char* ip,int port);//连接
        BOOL Close();//断开
        BOOL MySend(const char* buff,int len);//发送
        BOOL SendAndRecv(char* sbuff,int len,char* rbuff);//发送并取回
        BOOL MyRecv(char* buff);//接收
        BOOL IsConnect();//是否连接中
        int GetLocalPort();//取本机端口

protected:
private:
        SOCKET m_LocalSocket;//句柄

};
//cpp文件
include "StdAfx.h"
#include "TcpCilent.h"
ClintTcp::ClintTcp(){

        m_LocalSocket = -1;
        WSADATA wsaData;
        if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
        printf("创建版本失败");
}
ClintTcp::~ClintTcp(){
        closesocket(m_LocalSocket);
}
BOOL ClintTcp::MyConnet(const char* ip,int port){  //连接服务器
        if (m_LocalSocket > 0)
        {closesocket(m_LocalSocket);}
        m_LocalSocket = socket (PF_INET,SOCK_STREAM,IPPROTO_TCP);
        if (m_LocalSocket == -1)
        {
                return FALSE;
        }
        sockaddr_in m_Serveraddr;
        memset(&m_Serveraddr,0,sizeof(m_Serveraddr));
        m_Serveraddr.sin_family = AF_INET;
        m_Serveraddr.sin_port = htons(port);
        m_Serveraddr.sin_addr.s_addr = inet_addr(ip);
        int conret = connect(m_LocalSocket,(sockaddr*)&m_Serveraddr,sizeof(m_Serveraddr));
        if (conret == SOCKET_ERROR)
        {
                printf("连接服务器失败! \n");
                closesocket(m_LocalSocket);
                m_LocalSocket = -1;
                return FALSE;
        }
                printf("连接服务器成功! \n");
        return TRUE;
}
BOOL ClintTcp::Close(){
        if (m_LocalSocket > 0)
        {
                closesocket(m_LocalSocket);
            return TRUE;
        }
return FALSE;
}
BOOL ClintTcp::MySend(const char* buff,int len){
int len_al = send(m_LocalSocket,buff,len,0);
printf("实际发送了 %d 字节 \n",len_al);
return TRUE;
}
BOOL ClintTcp::MyRecv(char* buff){

    memset(buff,0,1000);//清空缓冲区         
    int len = recv(m_LocalSocket,buff,1000,0);
        if (len<=0)
        {
                return FALSE;
        }
        return TRUE;

}
BOOL ClintTcp::SendAndRecv(char* sbuff,int slen,char* rbuff){
        MySend(sbuff,slen);
        BOOL bRecv;
        while (true)
        {
                bRecv = MyRecv(rbuff);
                if (bRecv)
                {
                        break;
                }

        }
        return true;
}
int main(int argc, char* argv[])
{
   //测试
        ClintTcp* nClintTcp = new ClintTcp();
        nClintTcp->MyConnet("127.0.1.1",9001);//连接服务端 IP,端口
        char maccode[20] = "111111111111111111"
        char m_buff[1000];
        nClintTcp->SendAndRecv(maccode,sizeof(maccode),m_buff);
        printf("接收:%s \n",m_buff);
        return 0;
}

免费评分

参与人数 2吾爱币 +3 热心值 +2 收起 理由
chunlin0107 + 1 用心讨论,共获提升!
苏紫方璇 + 3 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

xxcwxxcw 发表于 2020-4-8 05:01
感谢楼主分享,学习学习了
diyikuai 发表于 2020-4-8 06:54
gh0st_ 发表于 2020-4-26 08:17
lycpp 发表于 2020-5-15 15:32
这个... tcp  就存着: 超时,重连,重发, 去重复的问题。  你这也太简单了把。

哦, 忘了,还有粘包的处理。
chunlin0107 发表于 2020-7-23 10:36
谢谢楼主,收藏了
chunlin0107 发表于 2020-7-23 10:37
有大佬出过完更加完善的版本吗?想要啊
edison_ 发表于 2020-7-23 12:45
感谢分享,先收藏着
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-26 04:43

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表