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

📄 bi_server.c

📁 网管程序.应用于网管主机之间按照规则交换网管数据
💻 C
字号:
/******************************************************************** * 文  件 : bi_server.c                                             * * 作  者 : 夏颖昌                                                  * * 日  期 : 2005.01                                                 * * 描  述 : 天津BI系统网管接口服务端                                * ********************************************************************/#include	<sys/types.h>#include	<sys/ipc.h>#include	<sys/msg.h>#include	<fcntl.h>#include	<stdio.h>#include	"ipc_define.h"#include	"binm_socket.h"#include	"md5c_tjbi.h"#ifndef         __DEBUG__#define         __DEBUG__#endifint main( int argc, char *argv[] ){   int		sSockFD;   int		sConnFD;   FILE		*listFP;   char		strDataFileHeader[ 50 + 1 ];   char		strDataFile[ 50 + 1 ];   char		strMD5File[ 50 + 1 ];   char		strSequence[ 50 + 1 ];   char		strDateTime[ 20 + 1 ];	   char		strDay[ 9 + 1 ];   int		i;		//计数器   int		j;   int		n;		//返回值判断   char		strExe[ 250 + 1 ];   int		sts;   int		pid;   int		pidStatus;   char		strDigestD[ 50 + 1 ];   char		strBase64D[ 50 + 1 ];   int		nLenBase64D;   char		strDigestM[ 50 + 1 ];	   char		strBase64M[ 50 + 1 ];   socklen_t	len_on;   const long	on = 1;		   PNMP_DATA	g_pPnmpData;   char		g_strBuffer[ MAX_NUM + 1 ];   MSG_BUFFER   msg_buffer;   MSG_BUFFER   msg_buffer2;   long         key;   int          msgid, msgid2;   int          len;   char         *msgpath="/home/interface/nm_socket";   struct sockaddr_in biSockAddr;   //经分socket地址   struct sockaddr_in nmSockAddr;   //网管socket地址		   len_on = sizeof ( long ) ;      key = ftok( msgpath, 'a' );	   if ( argc == 1 )   {      GetTime( strDateTime );      memset( strDay, 0x00, sizeof( strDay ));       strncpy( strDay, strDateTime, 8 );   }	   else if ( argc == 2 )   {      strcpy( strDay, argv[1] );		   }   else   {      printf( "Usage: bi_server or bi_server YYYYMMDD\n" );             exit( -1 );   }			   sSockFD = socket( AF_INET, SOCK_STREAM, 0 );   if ( sSockFD < 0 )   {      printf( "Error: Create the server socket Failed!\n" );#ifdef __DEBUG__   server_message_report( __FILE__, __LINE__, "Error: Create the server socket Failed!\n" );#endif      exit( 1 );   }	   printf( "BI Server: The socket id is: [%d]\n", sSockFD );#ifdef __DEBUG__   server_message_report( __FILE__, __LINE__, "BI Server: The socket id is: [%d]\n", sSockFD );#endif		   bzero( &biSockAddr, sizeof( biSockAddr ));   biSockAddr.sin_family = AF_INET;   biSockAddr.sin_addr.s_addr = htonl( INADDR_ANY );   biSockAddr.sin_port = htons( BI_PORT );   setsockopt ( sSockFD, SOL_SOCKET, SO_REUSEADDR,				( long * )&on, ( socklen_t )len_on ) ;		   if( bind( sSockFD, (struct sockaddr* )&biSockAddr, sizeof( biSockAddr )) < 0 )   {      printf( "Error: Bind Failed: %s\n", strerror( errno ));#ifdef __DEBUG__   server_message_report( __FILE__, __LINE__, "Error: Bind Failed: %s\n", strerror( errno ));#endif      exit( 1 );   }   printf( "Bind  successfully!\n" );#ifdef __DEBUG__   server_message_report( __FILE__, __LINE__, "Bind  successfully!\n" );#endif   if( listen( sSockFD, BACKLOG ) < 0 )   {      printf( "Error: Listen Failed: %s\n", strerror( errno ));#ifdef __DEBUG__   server_message_report( __FILE__, __LINE__, "Error: Listen Failed: %s\n", strerror( errno ));#endif      exit( 1 );   }FOR:   printf("listening......\n" );#ifdef __DEBUG__   server_message_report( __FILE__, __LINE__, "listening......\n" );#endif   for(;;)   {      sConnFD = accept( sSockFD, NULL, NULL );      if( sConnFD < 0 )      {         printf( "Error: Accept Failed: %s\n", strerror( errno ));#ifdef __DEBUG__   server_message_report( __FILE__, __LINE__, "Error: Accept Failed: %s\n", strerror( errno ));#endif         //exit( 1 );         continue;      }      printf( "Accept successfully!\n" );	#ifdef __DEBUG__   server_message_report( __FILE__, __LINE__, "Accept successfully!\n" );#endif						      //接收网管端的鉴权请求      i = 0;      while( 1 )      {         if( ++i >= 3 )         {            printf( "Error: receive from NET failed\n" );            close( sConnFD );            goto FOR;         }         sts = ReceiveData2( sConnFD, &g_pPnmpData );          if( sts == -1 )      //接收鉴权确认         {            sleep( 5 );            continue;         }         else if( sts == -2 )      //接收鉴权确认         {            //printf( "Nothing Received within 5 min---socket CLOSED\n" );            //close( sConnFD );            //goto FOR;            sleep( 5 );            continue;         }         else            break;      }      //发送鉴权确认      if( SendAckAuth( sConnFD ) == -1 )		      {         //printf( "Error: Call SendAckAuth Failed: %s\n", strerror( errno ));         //exit( 1 );         goto FOR;      }      for(;;)      {SYNC:         i = 0;         //printf( "Now Receive the Req Sync; Times [%d]\n", i+1 );         while( 1 )//接收同步确认         {            InitStruct( &g_pPnmpData );            sts = ReceiveData2( sConnFD, &g_pPnmpData );             if( sts == -1 )      //接收同步确认            {               //printf( "Now Receive the Auth Req; Times [%d]\n", i+1 );               printf( "Error: Receive Auth Req  error 3 time!\n" );#ifdef __DEBUG__   server_message_report( __FILE__, __LINE__, "Error: Receive Auth Req  error 3 time!\n" );#endif               shutdown ( sConnFD, SHUT_WR );               close( sConnFD );               goto FOR;            }            else if( sts == -2 )            {               shutdown ( sConnFD, SHUT_WR );               close( sConnFD );               goto FOR;            }            else            {printf( "TaskFinish---PackageType: [%d]\n", g_pPnmpData.pdPackageType );printf( "TaskFinish---pdCommand: [%d]\n", g_pPnmpData.pdCommand );printf( "TaskFinish---pdStatus: [%d]\n", g_pPnmpData.pdStatus );#ifdef __DEBUG__   server_message_report( __FILE__, __LINE__, "TaskFinish---PackageType: [%d]\nTaskFinish---pdCommand: [%d]\nTaskFinish---pdStatus: [%d]\n", g_pPnmpData.pdPackageType, g_pPnmpData.pdCommand, g_pPnmpData.pdStatus );#endif               if( g_pPnmpData.pdPackageType == 3 &&                   g_pPnmpData.pdCommand == 2 &&                         g_pPnmpData.pdStatus == 2 )               {                  msgid2 = msgget( key, IPC_CREAT|0777 );                  BuildData( &g_pPnmpData, msg_buffer2.data_buffer );                  msgsnd( msgid2, msg_buffer2.data_buffer,                                sizeof( msg_buffer2.data_buffer ), IPC_NOWAIT );                  if( SendAck( sConnFD, 0 ) == -1 )                  {                     //printf( "Error: Call SendAck Failed\n" );                     //exit( 1 );                     goto FOR;                  }                  //等待下载完成                  while( 1 )                  {                     msgid = msgget( 0x888, IPC_CREAT|0666 );                     memset( msg_buffer.data_buffer, 0x00, sizeof( msg_buffer.data_buffer ));                     len = msgrcv( msgid, msg_buffer.data_buffer,                     sizeof( msg_buffer.data_buffer ), 0, IPC_NOWAIT|MSG_NOERROR );                     if( len >= 0 )                        break;                     sleep( 1 );                  }                  if(memcmp(msg_buffer.data_buffer,"FtpTaskSucc",11) == 0)                  {                     if ( SendMsgTaskSucc( sConnFD, g_pPnmpData.pdSequence, g_pPnmpData.pdParameter ) < 0 )                     {                        //printf( "Error: call SendMsgTaskSucc Failed!\n");                        //exit ( -1 );                        goto FOR;                     }/*                     InitStruct( &g_pPnmpData );                     sts = ReceiveData( sConnFD, &g_pPnmpData );                     if( sts < 0 )                     {                        printf( "Error: Receive MsgTask  Failed!\n" );#ifdef __DEBUG__   server_message_report( __FILE__, __LINE__, "Error: Receive MsgTask  Failed!\n" );#endif                        //close( sConnFD );                        //goto FOR;                     }*/                  }                  if(memcmp(msg_buffer.data_buffer,"MD5Error", 8) == 0)                  {                     if ( SendMsgTaskFail( sConnFD, g_pPnmpData.pdSequence, g_pPnmpData.pdParameter ) < 0 )                     {                        //printf( "Error: call SendMsgTaskFail Failed!\n");                        //exit ( -1 );                        goto FOR;                     }/*                     InitStruct( &g_pPnmpData );                     sts = ReceiveData( sConnFD, &g_pPnmpData );                     if( sts < 0 )                     {                        printf( "Error: Receive MsgTask  Failed!\n" );#ifdef __DEBUG__   server_message_report( __FILE__, __LINE__, "Error: Receive MsgTask  Failed!\n" );#endif                        //close( sConnFD );                        //goto FOR;                     }*/                  }                  goto SYNC;               }               break;            }         }         //发送确认         if( SendAckSync( sConnFD ) == -1 )                 {            printf( "Error: Call SendAckSync Failed: %s\n", strerror( errno ));#ifdef __DEBUG__   server_message_report( __FILE__, __LINE__, "Error: Call SendAckSync Failed: %s\n", strerror( errno ));#endif            //exit( 1 );            goto FOR;         }      }   }   shutdown ( sConnFD, SHUT_WR );   close( sConnFD );}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -