You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

181 lines
6.7 KiB
C

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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