UDP可靠通信 可不依赖系统SOCKET 更新12月5 NTCP0.94

来源:互联网 发布:俄罗斯留学生活 知乎 编辑:程序博客网 时间:2024/05/17 11:58

支持开发语言 C/C++,静态链接库形式,OS: windows 2000更高版本系统

 

 

NTCP简介

 

NTCP Network Transmission Control Protocol(网络传输控制协议)的缩写,由于函数名的原因而命名。NTCP是以TCP为基础的可靠网络协议,可以应用在RAWUDPTCPip层、以太网层….,例如可以在UDP层实现P2P,以可靠连接方式穿越NAT,通过(DESRC4)进行加密,用于在两个通信应用程序之间提供保密性和数据完整性等等。

 

 

层次结构

 

 

收发数据

 

协议首部为20字节.(这个是固定的,不会为几K传输率进行修改,因为将来要支持与ip层的对接就可以实现完整的tcp/ip协议栈)

 

 

应用程序

 

以下是udp 实现方法,相信很多人用UDT等方试进行UDP可靠通信,但UDT是以DLL方式调用的使用起来灵活性欠缺,依赖系统提供的套接字等网络相关函数。NTCP后期版本会支持ring0,编写网络驱动可以在驱动里完成相关操作,目前你可以使用NTCPring3完成相关的操作。

 

 

应用API简介

 

/*

       usentcp0.9

       parameter:

       SENDPACK psk [in]  发送数据包的函数地址,当有数据需要发送时会调用此函数。

       RECVPACK*prk  [out]  收包函数地址,当低层收到数据包通过此函数传给NTCP内部处理。

       return:        TRUE表示成功 NULL失败

 

       Note:                    函数地址无效或重复初始化会失败

*/

int net_init(const SENDPACK psk,RECVPACK*prk);

 

/*

       usentcp0.9

       parameter:

       return:        成功返回插口id -1失败

       Note:

*/

int net_socket();

 

/*

       usentcp0.9

       parameter:

       intnet           [in]插口id

       return:    成功返回0失败-1

       Note:             无效插口ID会返回失败

*/

int net_close(int net);

 

/*

       usentcp0.9

       parameter:

       intnet                                [in]插口id

       unsignedshort port       [in]绑定端口

       return:    成功返回0失败-1

       Note:             无效插口ID会返回失败或端口已绑定

*/

int net_bind(int net,unsigned short port);

 

/*

       usentcp0.9

       parameter:

       intnet                  [in]插口id

       intmax_serv  [in]最大监听连接个数

       return:    成功返回0失败-1

       Note:             无效插口ID会返回失败

*/

int net_listen(int net,int max_serv);

 

/*

       usentcp0.9

       parameter:

       intnet                         [in]插口id

       unsignedint *caddr      [out]返回的ip地址

       return:    成功返回接受的插口id失败-1

       Note:             无效插口ID会返回失败活动连接数限制20获取更多连接数请联系我

*/

int net_accept(int net,unsigned int*caddr);

 

/*

       usentcp0.9

       parameter:

       intnet                         [in]插口id

       unsignedint ipaddr[in]连接ip地址

       unsignedshort port[in]连接端口

       return:    成功返回0失败-1

       Note:活动连接数限制20获取更多连接数请联系我

*/

int net_connect(int net,unsigned int ipaddr,unsignedshort port);

 

/*

       usentcp0.9

       parameter:

       intnet                         [in] 插口id

       void*buf              [out]用于接收数据的缓冲区

       intlen                          [in] 缓冲区长度

       return:    成功返回读入的字节数失败<=0  (等于0远程端关闭)

       Note:

*/

int net_recv(int net,void *buf,int len);

 

/*

       usentcp0.9

       parameter:

       intnet                         [in]插口id

       void*buf              [in]包含待发送数据的缓冲区

       intlen                          [in]缓冲区中数据的长度

       return:    成功返回写入的字节数失败<=0

       Note:

*/

int net_send(int net,const void*buf,unsigned short len);

 

/*

       usentcp0.9

       parameter:

       intnet                         [in]插口id

       longcmd              [in] FIONBIO设置/ 清除非阻塞I/O标志

       void*argp                   [in]指向一个0 1值分别清除或设置本套接口的非阻塞标志

       return:                         成功返回0失败-1

       Note:

*/

int net_ioctl(int net,long cmd,void *argp);

 

/*

       usentcp0.9

       parameter:

       intmaxfdp1                        [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);

 

/*

       usentcp0.9

       parameter:

       intnet                        [in] 插口id

       level                     [in]选项定义的层次NET_SOL_SOCKET

       intoptname                  [in]需设置的选项NET_SO_SNDTIMEONET_SO_RCVTIMEO

       constvoid *optval [in]指针,指向存放选项值的缓冲区

       unsignedint optlen [in] optval缓冲区长度

       return:    成功返回0失败-1

       Note:

*/

int net_setsockopt(int net,int level,intoptname,const void *optval,unsigned int optlen);

 

/*

       usentcp0.9

       parameter:

       intnet                         [in]插口id

       unsignedint *addr        [out]返回的远程ip地址

       unsignedshort *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端口转换问题.)

 

 

 

 

示例源代码下载

 

Ntcp_udp_server(vc6)

Ntcp_udp_client(vc6)

 

 

作者:圣骑士 2012 08.

QQ309231735E-mall309231735@qq.com官网:http://ntcp.com.nu/