您的位置:首页 > 理论基础 > 计算机网络

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

2013-09-03 19:00 337 查看
支持开发语言 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简介
 
/*
       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地址
   
c9a8
    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.
QQ:309231735E-mall:309231735@qq.com官网:http://ntcp.com.nu/



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息