?? bi_client.c
字號:
/*************************************************************************** 文件名稱: bi_client.c* 功 能: 天津移動BI與網管接口客戶端* * 作 者: 夏穎昌* 編寫日期: 2005.01* 編寫地點: 天津移動* 編寫單位: 創我科技**************************************************************************/#include <signal.h>#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 cSockFD; 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 k; int sts; int n; //返回值判斷 char strExe[ 250 + 1 ]; 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, msgid3; int len; char *msgpath="/home/interface/nm_socket"; len_on = sizeof ( long ) ; struct sockaddr_in biSockAddr; //經分socket地址 struct sockaddr_in nmSockAddr; //網管socket地址 signal(SIGPIPE, SIG_IGN); 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_client or bi_client YYYYMMDD\n"); exit( -1 ); } SOCKET: if (( cSockFD = socket( AF_INET, SOCK_STREAM, 0 )) < 0 ) { printf("Error: Create the client socket!\n");#ifdef __DEBUG__ client_message_report( __FILE__, __LINE__, "Error: Create the client socket!\n");#endif exit( 1 ); } printf( "Client socket id is: [%d]\n", cSockFD );#ifdef __DEBUG__ client_message_report( __FILE__, __LINE__, "Client socket id is: [%d]\n", cSockFD );#endif //綁定到 網管服務端 bzero( &nmSockAddr, sizeof( nmSockAddr )); nmSockAddr.sin_family = AF_INET; nmSockAddr.sin_port = htons( NM_PORT ); //nmSockAddr.sin_addr = nm_ip_addr; //需要網管端的地址 //轉換網管服務端地址 if ( !inet_aton( NM_HOST_IP, &nmSockAddr.sin_addr )) { printf( "Error: Call the inet_aton!\n");#ifdef __DEBUG__ client_message_report( __FILE__, __LINE__, "Error: Call the inet_aton!\n");#endif exit( 1 ); } //printf("The nmSockAddr.sin_addr.s_addr is : %x\n", nmSockAddr.sin_addr.s_addr); //連接到 網管服務端CONNECT: while( 1 ) { if( connect( cSockFD, ( struct sockaddr* )&nmSockAddr, sizeof( struct sockaddr )) < 0 ) { printf( "Error: Can not Connect to netm : %s\n", strerror( errno ));#ifdef __DEBUG__ client_message_report( __FILE__, __LINE__, "Error: Can not Connect to netm : %s\n", strerror( errno ));#endif sleep( 1 ); shutdown ( cSockFD, SHUT_WR ); close( cSockFD ); //continue; goto SOCKET; } else { printf( "Connect to netm is successful!\n");#ifdef __DEBUG__ client_message_report( __FILE__, __LINE__, "Connect to netm is successful!\n");#endif //break; } //發送鑒權請求(若收到鑒權確認, 作循環操作)AUTH: for(;;) { //printf("Now Send the Req Auth; Times [%d]\n", i+1 ); if ( SendReqAuth( cSockFD ) < 0 ) { printf( "Error: call SendReqAuth Failed!\n" );#ifdef __DEBUG__ client_message_report( __FILE__, __LINE__, "Error: call SendReqAuth Failed!\n" );#endif continue; } InitStruct( &g_pPnmpData ); sts = ReceiveData( cSockFD, &g_pPnmpData ); if( sts < 0 ) //接收鑒權確認 { printf( "Error: Receive Auth Req Failed!\n" );#ifdef __DEBUG__ client_message_report( __FILE__, __LINE__, "Error: Receive Auth Req Failed!\n" );#endif shutdown ( cSockFD, SHUT_WR ); close( cSockFD ); goto SOCKET; } else { if ( g_pPnmpData.pdStatus != 0 ) { sleep( 5 ); continue; } else { printf( "Auth successfully!\n" );#ifdef __DEBUG__ client_message_report( __FILE__, __LINE__, "Auth successfully!\n" );#endif break; } } }SYNC: for(;;) { //監控調度任務處理模塊 msgid3 = msgget( 0x666, IPC_CREAT|0666 ); memset( msg_buffer.data_buffer, 0x00, sizeof( msg_buffer.data_buffer )); len = msgrcv( msgid3, msg_buffer.data_buffer, sizeof( msg_buffer.data_buffer ), 0, IPC_NOWAIT|MSG_NOERROR ); if ( len >= 0 ) { printf("receive data---------[%s]\n", msg_buffer.data_buffer ); printf("receive len ---------[%d]\n", len );#ifdef __DEBUG__ client_message_report( __FILE__, __LINE__, "receive data---------[%s]\nreceive len ---------[%d]\n", msg_buffer.data_buffer, len );#endif if(memcmp( msg_buffer.data_buffer, "ReqTask", 7 ) == 0 ) { //產生一個任務sequence GetTime( strSequence ); //strcpy( strDataFile, "M0402520050512100000.avl" ); memset(( char *)strDataFile, 0x00, sizeof( strDataFile )); memcpy( strDataFile, msg_buffer.data_buffer + 7, 20 ); //memcpy( strDataFile + 6, strSequence, 8 ); //memcpy( strDataFile + 14, "100000.avl", 10 ); //memcpy( strDataFile + 14, msg_buffer.data_buffer + 13, 6 ); memcpy( strDataFile + 20, ".avl", 4 ); printf( "strDataFile:[%s]\n", strDataFile );#ifdef __DEBUG__ client_message_report( __FILE__, __LINE__, "strDataFile:[%s]\n", strDataFile );#endif if ( SendReqTask( cSockFD, strSequence, strDataFile ) < 0 ) { printf( "Error: call SendReqTask Failed!\n" );#ifdef __DEBUG__ client_message_report( __FILE__, __LINE__, "Error: call SendReqTask Failed!\n" );#endif //exit ( -1 ); shutdown ( cSockFD, SHUT_WR ); close( cSockFD ); goto SOCKET; } InitStruct( &g_pPnmpData ); sts = ReceiveData( cSockFD, &g_pPnmpData ); if( sts < 0 ) { printf( "Error: Receive ReqTask Failed!\n" );#ifdef __DEBUG__ client_message_report( __FILE__, __LINE__, "Error: Receive ReqTask Failed!\n" );#endif shutdown ( cSockFD, SHUT_WR ); close( cSockFD ); goto SOCKET; } else { if ( g_pPnmpData.pdStatus != 2 ) { printf( "Error: ReqTask Failed---The pdStatus=[%d]\n", g_pPnmpData.pdStatus );#ifdef __DEBUG__ client_message_report( __FILE__, __LINE__, "Error: ReqTask Failed---The pdStatus=[%d]\n", g_pPnmpData.pdStatus );#endif } else {REQTASK: 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 ); //等待下載完成 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( cSockFD, strSequence, strDataFile ) < 0 ) { printf( "Error: call SendMsgTaskSucc Failed!\n" );#ifdef __DEBUG__ client_message_report( __FILE__, __LINE__, "Error: call SendMsgTaskSucc Failed!\n" );#endif //exit ( -1 ); shutdown ( cSockFD, SHUT_WR ); close( cSockFD ); goto SOCKET; } InitStruct( &g_pPnmpData ); sts = ReceiveData( cSockFD, &g_pPnmpData ); if( sts < 0 ) { printf( "Error: Receive MsgTask Failed!\n" );#ifdef __DEBUG__ client_message_report( __FILE__, __LINE__, "Error: Receive MsgTask Failed!\n" );#endif shutdown ( cSockFD, SHUT_WR ); close( cSockFD ); goto SOCKET; } } if(memcmp( msg_buffer.data_buffer, "MD5Error", 8 ) == 0 ) { if ( SendMsgTaskFail( cSockFD, strSequence, strDataFile ) < 0 ) { printf( "Error: call SendMsgTaskFail Failed!\n" );#ifdef __DEBUG__ client_message_report( __FILE__, __LINE__, "Error: call SendMsgTaskFailFailed!\n" );#endif //exit ( -1 ); shutdown ( cSockFD, SHUT_WR ); close( cSockFD ); goto SOCKET; } InitStruct( &g_pPnmpData ); sts = ReceiveData( cSockFD, &g_pPnmpData ); if( sts < 0 ) { printf( "Error: Receive MsgTask Failed!\n" );#ifdef __DEBUG__ client_message_report( __FILE__, __LINE__, "Error: Receive MsgTask Failed!\n" );#endif shutdown ( cSockFD, SHUT_WR ); close( cSockFD ); goto SOCKET; } } } //else //printf( "read IPC failed\n" ); //msgctl( msgid, IPC_RMID, NULL ); //同步 if ( SendReqSync( cSockFD ) != 0 ) { printf( "Error: call SendReqSync Failed!\n" );#ifdef __DEBUG__ client_message_report( __FILE__, __LINE__, "Error: call SendReqSync Failed!\n" );#endif shutdown ( cSockFD, SHUT_WR ); close( cSockFD ); goto SOCKET; //continue; } InitStruct( &g_pPnmpData ); sts = ReceiveData( cSockFD, &g_pPnmpData ); if( sts < 0 ) { printf( "Error: Receive Sync Ack Failed!\n" );#ifdef __DEBUG__ client_message_report( __FILE__, __LINE__, "Error: Receive Sync Ack Failed!\n" );#endif shutdown ( cSockFD, SHUT_WR ); close( cSockFD ); goto SOCKET; } else { if ( g_pPnmpData.pdStatus != 0 ) { printf( "Sync failed---Status=[%d]\n", g_pPnmpData.pdStatus );#ifdef __DEBUG__ client_message_report( __FILE__, __LINE__, "Sync failed---Status=[%d]\n", g_pPnmpData.pdStatus );#endif if ( g_pPnmpData.pdStatus == 2 ) goto REQTASK; } else { printf( "Sync successfully!\n" );#ifdef __DEBUG__ client_message_report( __FILE__, __LINE__, "Sync successfully!\n" );#endif } } sleep( 30 ); } //大的循環connect } shutdown ( cSockFD, SHUT_WR ); close( cSockFD );}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -