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/
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/
相关文章推荐
- 基于LINUX系统的SOCKET通信,使用UDP协议.
- socket的UDP通信简单例子
- UDP通信中系统有一个8.6K的缓存区
- UDP socket (UDP套接口通信)
- [C++] socket - 2 [UDP通信C/S实例]
- java socket编程——UDP通信
- <>socket通信-udp和TCP-串口通信
- Java系列讲座二:Socket网络通信实现聊天软件项目讲解(UDP)
- 使用socket.io和node.js搭建及时通信系统
- Python基于socket模块实现UDP通信功能示例
- 重新想象 Windows 8 Store Apps (62) - 通信: Socket TCP, Socket UDP
- 自制即时通信系统:socket网络编程(3)
- [python] 专题七.网络编程之套接字Socket、TCP和UDP通信实例
- Socket 通信原理(Android客户端和服务器以TCP&&UDP方式互通)
- socket编程实现一个简单的多人通信(udp)
- Socket 通信原理(Android客户端和服务器以TCP&&UDP方式互通)
- 【socket通信】系统调用socket的各机制
- socket通信,tcp,udp通信
- [摘抄-Socket-学习中]UDP通信基础代码-server端
- socket编程 -- 基于UDP协议的C/S通信模型及实现