|
|
/*********************************************************************
|
|
|
*文件说明: socket 封装类接口文件,所有对外接口都在这里定义
|
|
|
*作者:
|
|
|
*日期: 2013/11/25
|
|
|
*修改日志: 2013/11/25 logos 创建
|
|
|
|
|
|
***********************************************************************/
|
|
|
#pragma once
|
|
|
#ifndef DLL_INCLUDE_SOCKET_SKT_H
|
|
|
#define DLL_INCLUDE_SOCKET_SKT_H
|
|
|
|
|
|
#ifndef EXPORT_C
|
|
|
#define EXPORT_C extern "C"
|
|
|
#endif
|
|
|
|
|
|
#ifndef WINAPI
|
|
|
#define WINAPI __stdcall
|
|
|
#endif
|
|
|
|
|
|
enum EMSktStatus
|
|
|
{
|
|
|
SOCKET_NOINIT = -1, //未初始化、不存在
|
|
|
SOCKET_DISCONNECTED = 0, //未连接
|
|
|
SOCKET_CONNECTED, //已连接
|
|
|
};
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 初始化模块
|
|
|
*Intput: NULL
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI skt_init();
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 释放模块 资源
|
|
|
*Intput: NULL
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI skt_deinit();
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 设置是否打印日志
|
|
|
*Intput: NULL
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误代码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI skt_log(int bprint = 0);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 创建一个tcp客户端
|
|
|
*Intput: server 要连接的服务端ip
|
|
|
port 要连接的服务端端口
|
|
|
local 要绑定的本地ip,不需绑定传NULL即可
|
|
|
lport 要绑定的本地端口,不使用传0
|
|
|
*Output: NULL
|
|
|
*Return: 失败返回INVALID_SKT, 成功返回skt句柄
|
|
|
*PS: 创建成功后调用skt_status可以查询是否连接ok,
|
|
|
若未连接,每次调用skt_status都会尝试连接一次
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI skt_client(const char* server, unsigned short port, const char* local = 0, unsigned short lport = 0);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 创建一个tcp服务端
|
|
|
*Intput: server 要绑定的服务端ip,可以传NULL
|
|
|
port 要绑定的服务端端口
|
|
|
local 指定客户端ip,不指定传NULL即可,即随机IP
|
|
|
lport 指定客户端port,不指定传NULL即可,即随机port
|
|
|
*Output: NULL
|
|
|
*Return: 失败返回INVALID_SKT, 成功返回skt句柄
|
|
|
*PS: 创建成功后调用skt_status可以查询是否连接ok
|
|
|
若未连接,每次调用skt_status都会尝试接受连接一次
|
|
|
*PS: 相同IP相同端口建立的server会自动合并
|
|
|
*PS: 不传入客户端IP时,首次连接断开后,重连会验证IP
|
|
|
*PS: 传入客户端IP或者端口时,重连会验证IP以及端口相同
|
|
|
*PS: 重连为覆盖模式,即发现新连接时,会自动关闭旧连接,使用新连接
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI skt_server(const char* server, unsigned short port, const char* local = 0, unsigned short lport = 0);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 关闭并释放一个句柄
|
|
|
*Intput: skt 句柄
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误代码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI skt_close(int skt);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 尝试连接/等待连接,适用于客户端/服务端.
|
|
|
*Intput: skt 句柄
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误代码
|
|
|
*PS: 返回0表示已经连接ok
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI skt_conn(int skt);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 断开连接,但不关闭句柄,
|
|
|
*Intput: skt 句柄
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误代码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI skt_disconn(int skt);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 清空消息缓冲区.
|
|
|
*Intput: skt 句柄
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误代码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI skt_clear(int skt);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 查询当前状态,适用于客户端/服务端.
|
|
|
*Intput: skt 句柄
|
|
|
*Output: NULL
|
|
|
*Return: 参考EMSktStatus
|
|
|
*PS: 若未连接,每次调用skt_status都会手动连接一次
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI skt_status(int skt);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 发送消息函数,适用于客户端/服务端.
|
|
|
*Intput: skt 句柄
|
|
|
pdata 要发送的数据
|
|
|
len 要发送的数据长度
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回发送成功的数据长度,失败返回错误代码 不会返回0
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI skt_send(int skt, const char* pdata, int len);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 发送字符串消息函数,适用于客户端/服务端.
|
|
|
*Intput: skt 句柄
|
|
|
pszdata 要发送的字符串数据
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回发送成功的数据长度,失败返回错误代码 不会返回0
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI skt_sends(int skt, const char* pszdata);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 接收消息函数,适用于客户端/服务端.
|
|
|
*Intput: skt 句柄
|
|
|
pdata 接收数据缓冲区
|
|
|
nsize 能接收的最大数据长度
|
|
|
timeout 超时,默认无限等待,直到有消息或者连接被关闭
|
|
|
*Output: pdata 接收数据缓冲区
|
|
|
*Return: 成功返回接收到的数据长度,失败返回错误代码,不会返回0
|
|
|
ps:返回ERR_TIMEOUT表示没有消息可读,函数超时返回
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI skt_recv(int skt, char* pdata, int nsize, int timeout = 0xFFFFFFFF);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 设置/取消连接覆盖模式. -- 新连接将覆盖旧连接,不管旧连接是否ok
|
|
|
*Intput: skt 句柄
|
|
|
bcover 1标识覆盖模式 0标识不使用覆盖模式,当前连接断开才会重连
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误代码
|
|
|
*PS: 理论上客户/服务端都可以用,但一般用于服务端,有新连接时替换旧连接。
|
|
|
*PS: 服务端覆盖将根据创建时传入的客户端IP地址及端口匹配重连,
|
|
|
若未传入,则使用首次连接的IP匹配,端口为0时不匹配端口
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI skt_set_cover(int skt, int bcover = 1);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取一个skt句柄对应的底层socket句柄
|
|
|
*Intput: skt skt句柄
|
|
|
*Output: NULL
|
|
|
*Return: 失败返回INVALID_SKT, 成功返回soket句柄
|
|
|
*PS: 此句柄可以直接使用sysapi接口调用
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI skt_get_socket(int skt);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取一个skt对应的对端ip/port
|
|
|
*Intput: skt 句柄
|
|
|
*Output: lpRemote ip地址指针 可以传NULL
|
|
|
pusport 端口指针 可以传NULL
|
|
|
*Return: 成功返回0,失败返回错误代码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI skt_get_addr(int skt, char* lpRemote = 0, unsigned short* pusport = 0);
|
|
|
|
|
|
#endif //防止重复包含
|