-
Notifications
You must be signed in to change notification settings - Fork 40
/
Copy pathBcecrSocket.h
87 lines (75 loc) · 2.12 KB
/
BcecrSocket.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
/** Copyright notice \n
* Copyright (c) 2016, BCECR
* All rights reserved.
* @file BcecrSocket.h
* @brief BCECR SOCKET
* @version 1.0
* @date unknow
* @update 2017/3/10
* @author BCECR
*/
#pragma once
#include <WinSock2.h>
#include <string>
/// 最大监听客户端数
#define MAX_LISTEN 5
/// 默认缓冲区大小
#define DEFAULT_BUFFER 256
/************************************************************************/
/* socket 错误码定义 */
/************************************************************************/
/// no error
#define _NO__ERROR 0
/// WSAStartup() error
#define ERROR_WSASTARTUP 1
/// socket() error
#define ERROR_SOCKET 2
/// connect() error
#define ERROR_CONNECT 3
/// bind() error
#define ERROR_BIND 4
/// listen() error
#define ERROR_LISTEN 5
/// ioctlsocket() error
#define ERROR_IOCTLSOCKET 6
/**
* @class CBcecrSocket
* @brief socket通信类,建立socket通信的服务器/客户端程序
* @details 实现基本的收/发数据的功能
*/
class CBcecrSocket
{
public:
/// 构造函数
CBcecrSocket();
/// 析构
~CBcecrSocket();
/// 初始化socket
int init(const char *pIp, int nPort, int nType); //0:server, 1:client
int init(SOCKET s, const char *ip); // 从s创建客户端socket
/// 只针对client端,连接服务端
int Connect();
/// socket退出时进行清理工作
void unInit();
/// 接收数据
int recvData(char *pBuf, int nReadLen, int nTimeOut = 1000); //nTimeOut单位毫秒
/// 发送数据
int sendData(const char *pData, int nSendLen);
/// 错误信息
std::string GetErrorMsg(const int nRet) const;
bool IsConnected() const { return m_bConneted; }
bool IsRegistered() const { return m_bRegistered; } // 是否注册
void Register(bool result) { m_bRegistered = result; } // 注册是否成功
SOCKET getSocket() const { return m_Socket; }
private:
bool m_bInit; /**< 是否已经初始化 */
bool m_bConneted; /**< 是否已连接成功 */
bool m_bRegistered; /**< 是否注册成功 */
int m_nType; /**< socket类型,0:server, 1:client */
SOCKET m_Socket; /**< 作为客户端连接的socket */
sockaddr_in m_in;
public:
char m_chToIp[32]; /**< 对方的IP */
int m_chToport; /**< 对方的端口 */
char m_chLocalIp[32]; /**< 本地IP */
};