|
|
using System;
|
|
|
using System.Text;
|
|
|
using System.Collections.Generic;
|
|
|
using System.Runtime.InteropServices;
|
|
|
|
|
|
namespace ocean
|
|
|
{
|
|
|
public enum EMSocketStatus
|
|
|
{
|
|
|
SOCKET_DISCONNECTED = 0, //未连接
|
|
|
SOCKET_CONNECTED, //已连接
|
|
|
};
|
|
|
|
|
|
public class skt
|
|
|
{
|
|
|
/****************************************************
|
|
|
*Function: 初始化socket
|
|
|
*Intput: NULL
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
******************************************************/
|
|
|
[DllImport(@"skt.dll", EntryPoint = "skt_init", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
|
|
|
public static extern int init();
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 反初始化socket
|
|
|
*Intput: NULL
|
|
|
*Output: NULL
|
|
|
*Return: NULL
|
|
|
******************************************************/
|
|
|
[DllImport(@"skt.dll", EntryPoint = "skt_deinit", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
|
|
|
public static extern int deinit();
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 创建一个tcp 客户端,自动连接
|
|
|
释放对象时,自动关闭socket.
|
|
|
*Intput: pszip 要连接的服务端ip
|
|
|
sport 要连接的服务端端口
|
|
|
local 要绑定的本地ip,不需绑定传NULL即可
|
|
|
lport 要绑定的本地端口,不使用传0
|
|
|
*Output: NULL
|
|
|
*Return: 失败返回INVALID_SKT, 成功返回skt句柄
|
|
|
*PS: 创建成功后调用skt_status可以查询是否连接ok
|
|
|
******************************************************/
|
|
|
[DllImport(@"skt.dll", EntryPoint = "create_c", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
|
|
|
public static extern int client(string pszip, ushort sport, string local = null, ushort lport = 0);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 创建一个tcp 服务端,并自动等待指定客户端连接
|
|
|
释放对象时,会自动关闭socket.
|
|
|
*Intput: pszip 要绑定的服务端ip,可以传NULL
|
|
|
sport 要绑定的服务端端口
|
|
|
local 指定客户端ip,不指定传NULL即可,即随机IP
|
|
|
lport 指定客户端port,不指定传NULL即可,即随机port
|
|
|
*Output: NULL
|
|
|
*Return: 失败返回INVALID_SKT, 成功返回skt句柄
|
|
|
*PS: 创建成功后调用get_status可以查询是否连接ok
|
|
|
******************************************************/
|
|
|
[DllImport(@"skt.dll", EntryPoint = "create_s", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
|
|
|
public static extern int server(string pszip, ushort sport, string local = null, ushort lport = 0);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 关闭并释放一个skt句柄
|
|
|
*Intput: skt skt句柄
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误代码
|
|
|
******************************************************/
|
|
|
[DllImport(@"skt.dll", EntryPoint = "skt_close", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
|
|
|
public static extern int close(int skt);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 手动连接skt,设置手动连接模式时,使用此接口连接
|
|
|
*Intput: skt skt句柄
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误代码
|
|
|
******************************************************/
|
|
|
[DllImport(@"skt.dll", EntryPoint = "skt_conn", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
|
|
|
public static extern int connect(int skt);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 断开一个skt连接,但不关闭句柄,
|
|
|
*Intput: skt skt句柄
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误代码
|
|
|
*PS: 若未设置手动连接,则断开后会自动重连.
|
|
|
******************************************************/
|
|
|
[DllImport(@"skt.dll", EntryPoint = "skt_disconn", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
|
|
|
public static extern int disconnect(int skt);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 发送消息函数,适用于客户端/服务端.
|
|
|
*Intput: skt skt句柄
|
|
|
pData 要发送的数据
|
|
|
len 要发送的数据长度
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回发送成功的数据长度,失败返回错误代码 不会返回0
|
|
|
******************************************************/
|
|
|
[DllImport(@"skt.dll", EntryPoint = "skt_send", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
|
|
|
public static extern int send(int skt, string pData, int len);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 接收消息函数,适用于客户端/服务端.
|
|
|
*Intput: skt skt句柄
|
|
|
pData 接收数据缓冲区
|
|
|
len 能接收的最大数据长度
|
|
|
timeout 超时,默认无限等待,直到有消息
|
|
|
或者连接被关闭
|
|
|
*Output: pData 接收数据缓冲区
|
|
|
*Return: 成功返回接收到的数据长度,失败返回错误代码,不会返回0
|
|
|
ps:返回ERR_TIMEOUT表示没有消息可读,函数超时返回
|
|
|
******************************************************/
|
|
|
[DllImport(@"skt.dll", EntryPoint = "skt_recv", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
|
|
|
public static extern int recv(int skt, StringBuilder pData, int len, uint timeout = 0xFFFFFFFF);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 查询当前skt状态,适用于客户端/服务端.
|
|
|
*Intput: skt skt句柄
|
|
|
*Output: NULL
|
|
|
*Return: 参考SocketNetStatus
|
|
|
******************************************************/
|
|
|
[DllImport(@"skt.dll", EntryPoint = "skt_status", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
|
|
|
public static extern int status(int skt);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取一个skt句柄对应的底层socket句柄
|
|
|
*Intput: skt skt句柄
|
|
|
*Output: NULL
|
|
|
*Return: 失败返回INVALID_SKT, 成功返回soket句柄
|
|
|
*PS: 此句柄可以直接使用sysapi接口调用
|
|
|
******************************************************/
|
|
|
[DllImport(@"skt.dll", EntryPoint = "get_socket", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
|
|
|
public static extern int socket(int skt);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取一个skt对应的对端ip/port
|
|
|
*Intput: skt skt句柄
|
|
|
*Output: lpRemote ip地址指针 可以传NULL
|
|
|
pusport 端口指针 可以传NULL
|
|
|
*Return: 成功返回0,失败返回错误代码
|
|
|
******************************************************/
|
|
|
[DllImport(@"skt.dll", EntryPoint = "get_socket", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
|
|
|
public static extern int addr(int skt,ref string lpRemote, ref ushort pusport);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 重置skt对应的消息缓冲区.
|
|
|
*Intput: skt skt句柄
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误代码
|
|
|
******************************************************/
|
|
|
[DllImport(@"skt.dll", EntryPoint = "clear_msg", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
|
|
|
public static extern int clear(int skt);
|
|
|
}
|
|
|
}
|