首页
社区
课程
招聘
[原创]更新ntcp0.94 UDP可靠通信
发表于: 2012-12-10 13:32 6756

[原创]更新ntcp0.94 UDP可靠通信

2012-12-10 13:32
6756
支持开发语言 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直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 212
活跃值: (31)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
广告!!!!!!!!!!!!!!!
2012-12-10 14:22
0
雪    币: 94
活跃值: (455)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
楼主无码无真相
2012-12-11 08:02
0
雪    币: 3763
活跃值: (3513)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
lib? 没源码
2022-6-24 20:27
0
游客
登录 | 注册 方可回帖
返回
//