|
关键词:
使用UDP可靠传输。
使用UDP可靠文件传输。
使用UDP可靠传输协议RDUP协议。
使用UDP实现可靠文件传输。
使用UDP协议实现数据可靠传输。
基于UDP的可靠数据传输协议。
一种实现可靠UDP传输的拥塞控制方法。
相关技术:
RUDP协议:可靠用户数据报协议(RUDP:Reliable UDP)。
UDT协议-基于UDP的可靠数据传输协议|UDT,协议,UDP,可靠,数据传输,协议。
UDP无差错传输文件或数据。
下载VTCP系统SDK: http://www.cnasm.com/down/vtcp4.0.rar
测试程序界面截图:

改进要点:
1.更加稳定可靠。
2.传输速度更快。
3.CPU占有率更低,适应更多的网络环境。
4.编程接口更完美,基本与Winsock api相同。
5.统计变量更多。
以下是二次开发接口(VTCP.H):
#pragma once
//////////////////////////////////////////////////////////////////////////
//设置函数操作名vctp_setsockopt(optname)
//////////////////////////////////////////////////////////////////////////
#define VTCP_OPTNAME_NONBIO 0//设置非阻塞(BOOL*)
#define VTCP_OPTNAME_PACKET 1//设置包参数(SVTcpOptPacket)
#define VTCP_OPTNAME_KEEPALIVE 2//设置活动检测时间(SVTcpOptKeepAlive)
#define VTCP_OPTNAME_RECV_TIMEO 3//设置接收超时(int*)(ms)
#define VTCP_OPTNAME_SEND_TIMEO 4//设置发送超时(int*)(ms)
#define VTCP_OPTNAME_CONNECT_TIMO 5//设置连接超时(int*)(ms)
//////////////////////////////////////////////////////////////////////////
//数据结构
//////////////////////////////////////////////////////////////////////////
typedef struct SVTcpOptPacket
{
WORD packet_data_size;//单包最大大小(UDP包的最大大小)(字节)
WORD packet_count;//包缓存数量(UDP包的缓存大小)
}VTCP_OPT_PACKET,*PVTCP_OPT_PACKET;
typedef struct SVTcpOptKeepAlive
{
int keep_alive;//保持活动超时(毫秒)
int keep_alive_interval;//保持活动时间间隔(毫秒)
}VTCP_OPT_KEEPALIVE,*PVTCP_OPT_KEEPALIVE;
typedef struct SVTcpStatCount
{
INT64 tcp_count_real_recv_data_bytes;
INT64 tcp_count_real_recv_data_bytes_micro;
INT64 tcp_count_real_send_data_bytes;
INT64 tcp_count_real_send_data_bytes_micro;
INT64 tcp_count_recv_data;
INT64 tcp_count_recv_data_ack;
INT64 tcp_count_recv_data_drop;
INT64 tcp_count_recv_sync;
INT64 tcp_count_recv_sync_ack;
INT64 tcp_count_send_data;
INT64 tcp_count_send_data_micro;
INT64 tcp_count_send_data_micro_prv;
INT64 tcp_count_send_data_ack;
INT64 tcp_count_send_data_reps;
INT64 tcp_count_send_data_reps_micro;
INT64 tcp_count_send_data_reps_micro_prv;
INT64 tcp_count_send_sync;
INT64 tcp_count_send_sync_ack;
int tcp_packet_reply;
int tcp_packet_ws_max;
int tcp_packet_ws;
int tcp_packet_data_size;
int tcp_timeout_send;//阻塞模式发送超时
int tcp_timeout_recv;//阻塞模式接收超时
int tcp_keepalive_timeout;//活动超时间
int tcp_keepalive_timeout_dec;//活动超时间递减
int tcp_keepalive_interval;//活动间隔时间
int tcp_keepalive_interval_dec;////活动时间间隔递减
DWORD tcp_sid;
DWORD tcp_sn_send;
DWORD tcp_sn_send_ws;
DWORD tcp_sn_recv;
int tcp_list_count_recv_async;
int tcp_list_count_recv;
int tcp_list_count_send_async;
int tcp_list_count_send;
DWORD tcp_sn_send_first;
DWORD tcp_sn_recv_first;
}VTCP_STAT_COUNT,*PVTCP_STAT_COUNT;
//////////////////////////////////////////////////////////////////////////
//类型声明(API)
//////////////////////////////////////////////////////////////////////////
//无错误返回:ERROR_SUCCESS
//////////////////////////////////////////////////////////////////////////
int WINAPI vtcp_startup(LPWSADATA wsad);
int WINAPI vtcp_socket(int* socket,BOOL bserver);
int WINAPI vtcp_bind(int socket,PSOCKADDR_IN sai,int sailen);
int WINAPI vtcp_listen(int socket,int backlog);
int WINAPI vtcp_accept(int socket,int* sockaccept,PSOCKADDR_IN addr,int* addrlen);
int WINAPI vtcp_acceptex(int socket,int* sockaccept,PSOCKADDR_IN addr,int* addrlen,LPWSAOVERLAPPED lpOverlapped,LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
int WINAPI vtcp_connect(int socket,PSOCKADDR_IN sai,int sailen);
int WINAPI vtcp_connectex(int socket,PSOCKADDR_IN sai,int sailen,LPWSAOVERLAPPED lpOverlapped,LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
int WINAPI vtcp_send(int socket,PCHAR buf,int len,int flag,int* lpcb);
int WINAPI vtcp_sendex(int socket,PCHAR buf,int len,int flag,int* lpcb,LPWSAOVERLAPPED lpOverlapped,LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
int WINAPI vtcp_recv(int socket,PCHAR buf,int len,int flag,int* lpcb);
int WINAPI vtcp_recvex(int socket,PCHAR buf,int len,int flag,int* lpcb,LPWSAOVERLAPPED lpOverlapped,LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
int WINAPI vtcp_setsockopt(int socket,int optname,PCHAR optval,int optlen);
int WINAPI vtcp_getpeername(int socket,PSOCKADDR_IN sai,int sailen);
int WINAPI vtcp_getsockname(int socket,PSOCKADDR_IN sai,int sailen);
int WINAPI vtcp_getoverlapresult(int socket,LPWSAOVERLAPPED lpOverlapped,LPDWORD lpcbTransfer,DWORD dwWait);
int WINAPI vtcp_getstatcount(int socket,SVTcpStatCount* tsc);
int WINAPI vtcp_close(int socket);
int WINAPI vtcp_cleanup();
|