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.

166 lines
8.9 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 class skts
{
/****************************************************
*Function: 初始化socket
*Intput: NULL
*Output: NULL
*Return: 成功返回0失败返回错误码
******************************************************/
[DllImport(@"skt.dll", EntryPoint = "skts_init", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int init();
/****************************************************
*Function: 反初始化socket
*Intput: NULL
*Output: NULL
*Return: NULL
******************************************************/
[DllImport(@"skt.dll", EntryPoint = "skts_deinit", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int deinit();
/****************************************************
*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
******************************************************/
[DllImport(@"skt.dll", EntryPoint = "skts_client", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int client(string 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: 若按描述连接,则每个服务端只能接收一个客户端连接
******************************************************/
[DllImport(@"skt.dll", EntryPoint = "skts_server", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int server(string pszdesc);
/****************************************************
*Function: 关闭并释放一个skt句柄
*Intput: skt skt句柄
*Output: NULL
*Return: 成功返回0,失败返回错误代码
******************************************************/
[DllImport(@"skt.dll", EntryPoint = "skts_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 = "skts_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 = "skts_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 = "skts_send", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int send(int skt, string pData, int len);
/****************************************************
*Function: 发送消息函数,适用于客户端/服务端.
*Intput: skt skt句柄
pData 要发送的数据
len 要发送的数据长度
*Output: NULL
*Return: 成功返回发送成功的数据长度,失败返回错误代码 不会返回0
******************************************************/
[DllImport(@"skt.dll", EntryPoint = "skts_sends", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int sends(int skt, string pData);
/****************************************************
*Function: 接收消息函数,适用于客户端/服务端.
*Intput: skt skt句柄
pData 接收数据缓冲区
len 能接收的最大数据长度
timeout 超时,默认无限等待,直到有消息
或者连接被关闭
*Output: pData 接收数据缓冲区
*Return: 成功返回接收到的数据长度,失败返回错误代码,不会返回0
ps:返回ERR_TIMEOUT表示没有消息可读,函数超时返回
******************************************************/
[DllImport(@"skt.dll", EntryPoint = "skts_recv", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int recv(int skt, StringBuilder pData, int len, uint timeout = 0xFFFFFFFF);
public static string recvs(int skt, uint timeout = 0xFFFFFFFF)
{
int ret = 0;
StringBuilder psz = new StringBuilder(256);
ret = recv(skt, psz, 256, timeout);
return ret > 0 ? psz.ToString() : "";
}
/****************************************************
*Function: 查询当前skt状态,适用于客户端/服务端.
*Intput: skt skt句柄
*Output: NULL
*Return: 参考SocketNetStatus
******************************************************/
[DllImport(@"skt.dll", EntryPoint = "skts_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 = "skts_clear", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int clear(int skt);
}
}