本论坛为只读模式,仅供查阅,不能注册新用户,不能发帖/回帖,有问题可发邮件 xikug.xp (^) gmail.com
查看: 15262|回复: 42

UDP可靠通信 可不依赖系统SOCKET 更新NTCP0.9.4 [复制链接]

Rank: 1

发表于 2012-8-21 15:58:03 |显示全部楼层
支持开发语言 C/C++,静态 链接库形式,OS: windows 2000或 更高版本系统


NTCP简介

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


层次结构

1.jpg


收发数据

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


应用程序

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

2.jpg


应用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会返回失败
*/
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:
*/
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 (0 Bytes, 下载次数: 1318)




示例源代码下载

Ntcp_udp_server(vc6) s.rar (0 Bytes, 下载次数: 1386)
Ntcp_udp_client(vc6) c.rar (0 Bytes, 下载次数: 1268)



作者:圣骑士 2012 08.


解压密码:
111333
QQ:309231735 E-mall:309231735@qq.com 官网:http://ntcp.com.nu/


3.jpg

Rank: 1

发表于 2012-9-28 21:49:37 |显示全部楼层
好先进的技术

Rank: 1

发表于 2012-9-28 23:05:16 |显示全部楼层
有点意思,谢了

Rank: 1

发表于 2012-10-11 15:24:44 |显示全部楼层
膜拜学习一下

Rank: 1

发表于 2012-10-13 20:05:52 |显示全部楼层
更新0.93

Rank: 2

发表于 2012-10-15 09:25:08 |显示全部楼层
9p9ip

Rank: 1

发表于 2012-10-19 10:05:59 |显示全部楼层
超级好先进的技术

Rank: 2

发表于 2012-10-19 13:13:22 |显示全部楼层
ida一下那个lib,你会很神奇发现里面99.9%都是lwip的代码

Rank: 9Rank: 9Rank: 9

发表于 2012-10-19 16:30:28 |显示全部楼层
不错,前段时间也研究了一下UDP可靠通信,要是有源代码就好了
悟空,退下,为师一个人就够了

Rank: 1

发表于 2012-10-22 17:20:47 |显示全部楼层
研究一下

Rank: 1

发表于 2012-10-31 23:19:00 |显示全部楼层
感觉好厉害的样子

Rank: 1

发表于 2012-11-9 15:51:48 |显示全部楼层
学习看看

Rank: 1

发表于 2012-11-9 16:34:30 |显示全部楼层
学习看看

Rank: 1

发表于 2012-11-13 14:56:04 |显示全部楼层
see see

Rank: 1

发表于 2012-11-14 18:17:06 |显示全部楼层
下来看看

Rank: 1

发表于 2012-11-14 23:24:19 |显示全部楼层
如果您要查看本帖隐藏内容请回复

Rank: 1

发表于 2012-11-17 15:41:23 |显示全部楼层
有什么作用或者优势?

Rank: 1

发表于 2012-12-5 17:45:52 |显示全部楼层
更新NTCP0.9.4     -,-

Rank: 1

发表于 2012-12-10 23:27:43 |显示全部楼层
loooooooooooook

Rank: 1

发表于 2012-12-13 12:36:41 |显示全部楼层
您需要登录后才可以回帖 登录 | 立即加入

Archiver|手机版|第8个男人 - 论坛为只读模式,仅供查阅

GMT+8, 2019-5-24 12:50 , Processed in 0.027368 second(s), 11 queries .

Design by pvo.cn

© 2011 Pvo Inc.

回顶部