⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tcpclnt.cpp

📁 WAP2.0协议源码包!!!!!!!!!!!!!!!!!
💻 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 + -