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.

184 lines
7.0 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 封装类接口文件,所有对外接口都在这里定义
*作者:
*日期: 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 //防止重复包含