UDP可靠通信 可不依赖系统SOCKET 更新12月5 NTCP0.94
来源:互联网 发布:俄罗斯留学生活 知乎 编辑:程序博客网 时间:2024/05/17 11:58
支持开发语言 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地址
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/
- UDP可靠通信 可不依赖系统SOCKET 更新12月5 NTCP0.94
- socket通信---UDP通信
- socket网络通信(udp)
- socket网络通信(udp)
- mfc socket udp通信
- UDP Socket通信学习
- Socket ( Udp) 通信服务端
- socket (UDP通信)
- socket udp通信
- Socket之UDP通信
- UDP通信socket编程
- socket实现UDP通信
- UDP之socket通信
- Android:Socket UDP通信
- socket之UDP通信
- Unity3D Socket通信 UDP
- udp socket通信
- 看看这个Lock可不可靠
- SilkTest循序渐进6-data driven test起步
- IE 兼容模式
- SilkTest循序渐进7-使用TrueLog
- SilkTest武林外史之1-Data Driven Test向导
- VLFeat
- UDP可靠通信 可不依赖系统SOCKET 更新12月5 NTCP0.94
- 第六章 AXF (ActXmlFromFramework) 活动ANDROID页面展现框架 android动态加载页面框架
- SilkTest武林外史之2-自动复原系统
- jquery 获取 form radio 值
- 使用 Visual Basic 设计 Python 的 GUI:Visual Tkinter
- SilkTest武林外史之3-测试Java AWT应用
- poj 1745 Divisibility dp
- Solution to Articulation Points, Bridges, and Biconnected Components Problem
- 今天所学(9.3)