📄 bi_server.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 + -