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.

154 lines
8.2 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.

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);
}
}