以下是二次开发接口(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();
//设置函数操作名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();
解决方案 »
- 调用C++的dll报内存错误
- 谁对ShellListView有研究?指点下
- 能否将里面的SQL语句转换成delphi里面能用的语句?大家帮帮忙~
- pagecontrol用什么方法可以使标签变成不可用?
- 怎么实现把form1中的image中的图片搬到form2中的image中
- 如何获取网络邻居中的机器名?
- savetostream();//*******请高手指点迷津!********//
- 有关mediaplayer的控键
- 如何使一个程序可以象屏保一样在窗口的最前端显示?
- 字符型数组和PChar的疑问????
- 请教一个关于“Socket error #10060”的问题
- SQL导入Access数据
//////////
//ÉèÖú¯Êý²Ù×÷Ãûvctp_setsockopt(optname)
//////////const VTCP_OPTNAME_NONBIO =0;//ÉèÖ÷Ç×èÈû(BOOL*)
const VTCP_OPTNAME_PACKET =1;//ÉèÖðü²ÎÊý(SVTcpOptPacket)
const VTCP_OPTNAME_KEEPALIVE= 2;//ÉèÖû¼ì²âʱ¼ä(SVTcpOptKeepAlive)
const VTCP_OPTNAME_RECV_TIMEO= 3;//ÉèÖýÓÊÕ³¬Ê±(int*)(ms)
const VTCP_OPTNAME_SEND_TIMEO =4;//ÉèÖ÷¢Ëͳ¬Ê±(int*)(ms)
const VTCP_OPTNAME_CONNECT_TIMO =5;//ÉèÖÃÁ¬½Ó³¬Ê±(int*)(ms)
//////////
//Êý¾Ý½á¹¹
//////////
type
SVTcpOptPacket =record
packet_data_size:WORD ;//µ¥°ü×î´ó´óС(UDP°üµÄ×î´ó´óС)(×Ö½Ú)
packet_count: WORD;//°ü»º´æÊýÁ¿(UDP°üµÄ»º´æ´óС)
end;
VTCP_OPT_PACKET=SVTcpOptPacket ;
PVTCP_OPT_PACKET =^PVTCP_OPT_PACKET; SVTcpOptKeepAlive =record keep_alive:integer;//±£³Ö»î¶¯³¬Ê±(ºÁÃë)
keep_alive_interval:integer;//±£³Ö»î¶¯Ê±¼ä¼ä¸ô(ºÁÃë)
end;
VTCP_OPT_KEEPALIVE=SVTcpOptPacket;
PVTCP_OPT_KEEPALIVE=^VTCP_OPT_KEEPALIVE; SVTcpStatCount =recordtcp_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:INT64;tcp_packet_reply:integer;
tcp_packet_ws_max:integer;
tcp_packet_ws:integer;
tcp_packet_data_size:integer;tcp_timeout_send:integer ;//×èÈûģʽ·¢Ëͳ¬Ê±
tcp_timeout_recv:integer ;//×èÈûģʽ½ÓÊÕ³¬Ê±
tcp_keepalive_timeout:integer ;//»î¶¯³¬Ê±¼ä
tcp_keepalive_timeout_dec:integer ;//»î¶¯³¬Ê±¼äµÝ¼õ
tcp_keepalive_interval:integer ;//»î¶¯¼ä¸ôʱ¼ä
tcp_keepalive_interval_dec:integer ;////»î¶¯Ê±¼ä¼ä¸ôµÝ¼õ tcp_sid:DWORD;
tcp_sn_send:DWORD;
tcp_sn_send_ws:DWORD;
tcp_sn_recv:DWORD;tcp_list_count_recv_async:integer;
tcp_list_count_recv:integer;
tcp_list_count_send_async:integer;
tcp_list_count_send:integer;tcp_sn_send_first:DWORD;
tcp_sn_recv_first:DWORD;end;
VTCP_STAT_COUNT= SVTcpStatCount ;
PVTCP_STAT_COUNT=^VTCP_STAT_COUNT;
//////////
//ÀàÐÍÉùÃ÷(API)
//////////
//ÎÞ´íÎó·µ»Ø:ERROR_SUCCESS
//////////function vtcp_startup(var wsad:WSADATA ):integer;stdcall;
function vtcp_socket(var socket:integer;bserver:bool):integer;stdcall;
function vtcp_bind(socket:integer;var sai:SOCKADDR_IN;sailen:integer):integer;stdcall;
function vtcp_listen(socket:integer;backlog:integer):integer;stdcall;
function vtcp_accept(socket:integer;var sockaccept:integer;var addr:SOCKADDR_IN;var addrlen:integer):integer;stdcall;
function vtcp_acceptex(socket:integer;var sockaccept:integer;var addr:SOCKADDR_IN;var addrlen:integer;var lpOverlapped:OVERLAPPED;lpCompletionRoutine:TPROverlappedCompletionRoutine ):integer;stdcall;
function vtcp_connect(socket:integer;var sai:SOCKADDR_IN;sailen:integer):integer;stdcall;
function vtcp_connectex(socket:integer;var sai:SOCKADDR_IN;sailen:integer;var lpOverlapped:OVERLAPPED; lpCompletionRoutine:TPROverlappedCompletionRoutine):integer;stdcall;
function vtcp_send(socket:integer;buf:PCHAR;len:integer;flag:integer;var lpcb:integer):integer;stdcall;
function vtcp_sendex(socket:integer;var buf:PCHAR;len:integer;flag:integer;var lpcb:integer;var lpOverlapped:OVERLAPPED;lpCompletionRoutine:TPROverlappedCompletionRoutine):integer;stdcall;
function vtcp_recv(socket:integer;buf:PCHAR;len:integer;flag:integer;var lpcb:integer) :integer;stdcall;
function vtcp_recvex(socket:integer;buf:PCHAR;len:integer;flag:integer;var lpcb:integer;var lpOverlapped:OVERLAPPED;lpCompletionRoutine:TPROverlappedCompletionRoutine):integer;stdcall;
function vtcp_setsockopt(socket:integer;optname:integer;optval:PCHAR;optlen:integer):integer;stdcall;
function vtcp_getpeername(socket:integer; var sai:SOCKADDR_IN;sailen:integer):integer;stdcall;
function vtcp_getsockname(socket:integer;var sai:SOCKADDR_IN;sailen:integer):integer;stdcall;
function vtcp_getoverlapresult(socket:integer;var lpOverlapped:OVERLAPPED ;var lpcbTransfer:DWORD ; dwWait:DWORD):integer;stdcall;
function vtcp_getstatcount(socket:integer;var tsc:SVTcpStatCount) :integer;stdcall;
function vtcp_close(socket:integer) :integer;stdcall;
function vtcp_cleanup():integer;stdcall
如果你有DLL,那可以在implementation中把函数重写一遍(直接将函数写在下面也可),并在所有函数后面加:
external '你的DLL名.dll';
如:
function vtcp_startup(var wsad:WSADATA ):integer;stdcall;external 'mydll.dll';