/********************************************************************* *文件说明: 参考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 //防止重复包含