📄 tcpclnt.cpp
字号:
/*///////////////////////////////////////////////////
Client package connection
///////////////////////////////////////////////////*/
#include <stdio.h>
#include <string.h>
#include <dos.h>
#include <time.h>
#include "etr_ppp.h"
#include "tcpclnt.h"
#define LINKTOUT 200
SERVER_ID& SERVER_ID::operator = (SERVER_ID& SID)
{
strcpy( IPStr, SID.IPStr );
Port = SID.Port;
return *this;
}
TCPClientManager::TCPClientManager( )
{
pHost = new struct SERVER_ID;
strcpy( pHost->IPStr, "10.0.0.2" );
pHost->Port = 1001;
ConnState = CLOSED;
Timeout = 0;
Conno = -1;
}
TCPClientManager::~TCPClientManager( )
{
delete pHost;
}
void TCPClientManager::Init( struct SERVER_ID* pSvrID )
{
strcpy( pHost->IPStr, pSvrID->IPStr );
pHost->Port = pSvrID->Port;
}
// return connect state
CONN_STATE TCPClientManager::Running( )
{
int i, myport;
NetPackagePro( );
// step1: processing opened connect
switch( ConnState )
{
case OPEN:
// check if opened conn is timeout then
if( ConnIsFinished( Conno )||ConnIsFatal( Conno) )
{
ConnClose( Conno, 1 );
ConnState = CLOSED;
Timeout = 0;
Conno = -1;
printf( "Conn Closed\n" );
}
break;
case START:
// step: check if the conn is established
if( ConnIsEstablished( Conno ) )
{
// connection established at last!
ConnState = OPEN;
printf( "Conn is Established!\n" );
SetTimeoutCnt( HeartBeat );
}
if( IsTimeout( ) )
{
printf( "Conn is timeout!\n" );
ConnClose( Conno, 1 );
ConnState = CLOSED;
Timeout = 0;
Conno = -1;
}
break;
case CLOSED:
myport = MyPort( );
Conno = ConnOpen( pHost->IPStr, "TCP/IP", myport, pHost->Port, NONBLOCKOPEN );
if( Conno < 0 )
{
// goto error processing...
return FAIL;
}
SetTimeoutCnt( LINKTOUT );
ConnState = START;
break;
}
return ConnState; // data is unavailable
}
int TCPClientManager::Close( )
{
int i1;
if( ConnState == CLOSED ) return 0;
i1 = ConnClose( Conno, 1 );
ConnState = CLOSED;
Timeout = 0;
Conno = -1;
return i1;
}
// 1 Tick = 55ms; NumTick=0: no timeout
int TCPClientManager::SetTimeoutCnt( long NumTick )
{
Timeout = NumTick;
if( NumTick > 0 ) StartTick = clock( );
return 0;
}
// return = 1: time out, =0: not yet!
int TCPClientManager::IsTimeout( )
{
unsigned long CurrentTick;
if( Timeout == 0 ) return 0;
CurrentTick = clock( );
if( CurrentTick >= (StartTick+Timeout) ) return 1;
return 0;
}
int TCPClientManager::WriteData( char* DatBuf, int DatLen )
{
int i1;
if( Conno<0 ) return EBADF;
for( i1=0; i1<1000; i1++ )
if( ConnCanSend( Conno, DatLen ) ) break;
if( i1<1000 )
{
i1 = ConnWrite( Conno, DatBuf, DatLen, 1 );
return i1;
}
return ENOBUFS;
}
int TCPClientManager::ReadData( char* DatBuf, int DatLen )
{
int i1;
if( Conno<0 ) return EBADF;
//if( ConnHasData( Conno ) )
//{
i1 = ConnRead( Conno, DatBuf, DatLen );
return i1;
//}
//return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -