支持开发语言 C/C++,静态 链接库形式,OS: windows 2000或 更高版本系统
NTCP简介
NTCP 是Network Transmission Control Protocol(网络传输控制协议)的缩写,由于函数名的原因而命名。NTCP 是以TCP为基础的可靠网络协议,可以应用在RAW、UDP、TCP、ip层、以太网层….,例如可以在UDP层实现P2P,以可靠连接方式穿越NAT,通过(DES 、RC4等)进行加密,用于在两个通信应用程序之间提供保密性和数据完整性 等等。
层次结构
收发数据
协议首部为20字节.(这个是固定的,不会为几K传输率进行修改,因为将来要支持与ip层的对接就可以实现完整的tcp/ip协议栈)
应用程序
以下是udp 实现方法,相信很多人用UDT等方试进行UDP可靠通信,但UDT是以DLL方式调用的使用起来灵活性欠缺,依赖系统提供的套接字等网络相关函数。NTCP后期版本会支持ring0,编写网络驱动可以在驱动里完成相关操作,目前你可以使用NTCP在ring3完成相关的操作。
应用API简介
/*
use ntcp0.9
parameter:
SENDPACK psk [in] 发送数据包的函数地址,当有数据需要发送时会调用此函数。
RECVPACK *prk [out] 收包函数地址,当低层收到数据包通过此函数传给NTCP内部处理。
return: TRUE 表示成功 NULL失败
Note: 函数地址无效或重复初始化会失败
*/
int net_init(const SENDPACK psk,RECVPACK *prk);
/*
use ntcp0.9
parameter:
return: 成功返回插口id -1失败
Note:
*/
int net_socket();
/*
use ntcp0.9
parameter:
int net [in] 插口id
return: 成功返回0 失败-1
Note: 无效插口ID会返回失败
*/
int net_close(int net);
/*
use ntcp0.9
parameter:
int net [in] 插口id
unsigned short port [in] 绑定端口
return: 成功返回0 失败-1
Note: 无效插口ID会返回失败 或端口已绑定
*/
int net_bind(int net,unsigned short port);
/*
use ntcp0.9
parameter:
int net [in] 插口id
int max_serv [in] 最大监听连接个数
return: 成功返回0 失败-1
Note: 无效插口ID会返回失败
*/
int net_listen(int net,int max_serv);
/*
use ntcp0.9
parameter:
int net [in] 插口id
unsigned int *caddr [out] 返回的ip地址
return: 成功返回接受的插口id 失败-1
Note: 无效插口ID会返回失败 活动连接数限制20 获取更多连接数请联系我
*/
int net_accept(int net,unsigned int *caddr);
/*
use ntcp0.9
parameter:
int net [in] 插口id
unsigned int ipaddr [in] 连接ip地址
unsigned short port [in] 连接端口
return: 成功返回0 失败-1
Note: 活动连接数限制20 获取更多连接数请联系我
*/
int net_connect(int net,unsigned int ipaddr,unsigned short port);
/*
use ntcp0.9
parameter:
int net [in] 插口id
void *buf [out] 用于接收数据的缓冲区
int len [in] 缓冲区长度
return: 成功返回读入的字节数 失败<=0 (等于0远程端关闭)
Note:
*/
int net_recv(int net,void *buf,int len);
/*
use ntcp0.9
parameter:
int net [in] 插口id
void *buf [in] 包含待发送数据的缓冲区
int len [in] 缓冲区中数据的长度
return: 成功返回写入的字节数 失败<=0
Note:
*/
int net_send(int net,const void *buf,unsigned short len);
/*
use ntcp0.9
parameter:
int net [in] 插口id
long cmd [in] FIONBIO 设置/ 清除非阻塞I/O 标志
void *argp [in] 指向一个0 或 1 值分别清除或设置本套接口的非阻塞标志
return: 成功返回0 失败-1
Note:
*/
int net_ioctl(int net,long cmd,void *argp);
/*
use ntcp0.9
parameter:
int maxfdp1 [in] 插口id+1
void *readset [in] 用于检查可读性
void *writeset [in] 用于检查可写性
void *exceptset [in] 忽略
void *timeout [in] 用于决定select等待I/o的最长时间。如果为空将一直等待
return: 成功返回>0 失败<=0
Note:
*/
int net_select(int maxfdp1,void *readset,void *writeset,void *exceptset,void *timeout);
/*
use ntcp0.9
parameter:
int net [in] 插口id
level [in] 选项定义的层次NET_SOL_SOCKET
int optname [in] 需设置的选项NET_SO_SNDTIMEO NET_SO_RCVTIMEO
const void *optval [in] 指针,指向存放选项值的缓冲区
unsigned int optlen [in] optval缓冲区长度
return: 成功返回0 失败-1
Note:
*/
int net_setsockopt(int net,int level,int optname,const void *optval,unsigned int optlen);
/*
use ntcp0.9
parameter:
int net [in] 插口id
unsigned int *addr [out] 返回的远程ip地址
unsigned short *port [out] 返回的远程端口
return: 成功返回0 失败-1
Note:
*/
int net_getpeername(int net,unsigned int *addr,unsigned short *port);
全部历史版本
Vc6封装 请用vc6创建工程调用
NTCP 0.9.0 2012 08
NTCP 0.9.1(bate) 2012 08
NTCP 0.9.2(bate) 2012 09 16
NTCP 0.9.3(bate) 2012 10 13
NTCP 0.9.4 2012 12 05 (添加活动连接.解决非对称NAT端口转换问题.)
ntcp0.9.4.rar示例源代码下载
Ntcp_udp_server(vc6)
s.rar
Ntcp_udp_client(vc6)
c.rar作者:圣骑士 2012 08.
QQ:309231735 E-mall:309231735@qq.com 官网:http://ntcp.com.nu/
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课