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