|
|
/*********************************************************************
|
|
|
*文件说明: 参考socket 封装进程内部通信模块+skt功能
|
|
|
*作者: logos
|
|
|
*日期: 2018/05/28
|
|
|
*修改日志: 2018/05/28 创建
|
|
|
|
|
|
***********************************************************************/
|
|
|
#pragma once
|
|
|
#ifndef DLL_INCLUDE_SOCKET_SKTS_H
|
|
|
#define DLL_INCLUDE_SOCKET_SKTS_H
|
|
|
|
|
|
#ifndef EXPORT_C
|
|
|
#define EXPORT_C extern "C"
|
|
|
#endif
|
|
|
|
|
|
#ifndef WINAPI
|
|
|
#define WINAPI __stdcall
|
|
|
#endif
|
|
|
|
|
|
enum EMSktsStatus
|
|
|
{
|
|
|
SOCKETS_NOINIT = -1, //未初始化、不存在
|
|
|
SOCKETS_DISCONNECTED = 0, //未连接
|
|
|
SOCKETS_CONNECTED, //已连接
|
|
|
};
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 初始化模块
|
|
|
*Intput: NULL
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI skts_init();
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 释放模块 资源
|
|
|
*Intput: NULL
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI skts_deinit();
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 设置是否打印日志
|
|
|
*Intput: NULL
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误代码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI skts_print_log(int bprint = 0);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 创建一个skts客户端,首次创建尝试连接一次
|
|
|
释放对象时,自动关闭.
|
|
|
*Intput: pszdesc 要连接的服务端描述 长度<32
|
|
|
*Output: NULL
|
|
|
*Return: 失败返回INVALID_SKT, 成功返回skts句柄
|
|
|
*PS: 创建成功后调用skts_status可以查询是否连接ok,
|
|
|
若未连接,每次调用skts_status都会尝试连接一次
|
|
|
*PS: 若需要创建tcp通信,则pszdesc格式:127.0.0.1:5000
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI skts_client(const char* pszdesc);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 创建一个skts服务端,首次创建尝试连接一次
|
|
|
释放对象时,会自动关闭.
|
|
|
*Intput: pszdesc 要绑定的服务端描述 长度<32
|
|
|
*Output: NULL
|
|
|
*Return: 失败返回INVALID_SKT, 成功返回skts句柄
|
|
|
*PS: 创建成功后调用skts_status可以查询是否连接ok
|
|
|
若未连接,每次调用skts_status都会尝试接受连接一次
|
|
|
*PS: 相同IP相同端口建立的server会自动合并
|
|
|
*PS: 若需要创建tcp通信,则pszdesc格式:127.0.0.1:5000
|
|
|
*PS: 若按描述连接,则每个服务端只能接收一个客户端连接
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI skts_server(const char* pszdesc);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 关闭并释放一个句柄
|
|
|
*Intput: skts skts句柄
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误代码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI skts_close(int skts);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 尝试连接/等待连接,适用于客户端/服务端.
|
|
|
*Intput: skts 句柄
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误代码
|
|
|
*PS: 返回0表示已经连接ok
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI skts_conn(int skts);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 断开连接,但不关闭句柄,
|
|
|
*Intput: skts 句柄
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误代码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI skts_disconn(int skts);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 清空消息缓冲区.
|
|
|
*Intput: skts 句柄
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误代码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI skts_clear(int skts);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 查询当前状态,适用于客户端/服务端.
|
|
|
*Intput: skts 句柄
|
|
|
*Output: NULL
|
|
|
*Return: 参考EMSktsStatus
|
|
|
*PS: 若未连接,每次调用skt_status都会手动连接一次
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI skts_status(int skts);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 发送消息函数,适用于客户端/服务端.
|
|
|
*Intput: skts 句柄
|
|
|
pdata 要发送的数据
|
|
|
len 要发送的数据长度
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回发送成功的数据长度,失败返回错误代码 不会返回0
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI skts_send(int skts, const char* pdata, int len);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 发送字符串消息函数,适用于客户端/服务端.
|
|
|
*Intput: skts 句柄
|
|
|
pszdata 要发送的字符串数据
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回发送成功的数据长度,失败返回错误代码 不会返回0
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI skts_sends(int skts, const char* pszdata);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 发送字符串消息,并等待回复字符串消息,适用于客户端/服务端.
|
|
|
*Intput: skts 句柄
|
|
|
pszdata 要发送的字符串数据
|
|
|
*Output: reply 接收数据缓冲区 大小必须保证256字节
|
|
|
*Return: 成功返回接收到的数据长度,失败返回错误代码,不会返回0
|
|
|
PS:必须保证在500ms内会返回消息,否则会影响该句柄的通信效率
|
|
|
PS:返回ERR_TIMEOUT表示没有消息可读,函数超时返回
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI skts_send_reply(int skts, const char* pszdata, char* reply);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 接收消息函数,适用于客户端/服务端.
|
|
|
*Intput: skts 句柄
|
|
|
pdata 接收数据缓冲区
|
|
|
nsize 能接收的最大数据长度
|
|
|
timeout 超时,默认无限等待,直到有消息或者连接被关闭
|
|
|
*Output: pdata 接收数据缓冲区
|
|
|
*Return: 成功返回接收到的数据长度,失败返回错误代码,不会返回0
|
|
|
ps:返回ERR_TIMEOUT表示没有消息可读,函数超时返回
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI skts_recv(int skts, char* pdata, int nsize, int timeout = 0xFFFFFFFF);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取一个句柄对应的底层socket句柄
|
|
|
*Intput: skts 句柄
|
|
|
*Output: NULL
|
|
|
*Return: 失败返回错误代码, 成功返回soket句柄
|
|
|
*PS: 仅tcp连接才能调用该接口,否则会返回ERR_INPUT_PARAM
|
|
|
*PS: 此句柄可以直接使用sysapi接口调用
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI skts_get_socket(int skts);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取一个句柄对应的对端ip/port
|
|
|
*Intput: skts 句柄
|
|
|
*Output: lpRemote ip地址指针 可以传NULL
|
|
|
pusport 端口指针 可以传NULL
|
|
|
*Return: 成功返回0,失败返回错误代码
|
|
|
*PS: 仅tcp连接才能调用该接口,否则会返回ERR_INPUT_PARAM
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI skts_get_addr(int skts, char* lpRemote = 0, unsigned short* pusport = 0);
|
|
|
|
|
|
#endif //防止重复包含
|