📄 jxnclient.cpp
字号:
#include <fstream.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <process.h>
#include <time.h>
#include <math.h>
#include <winsock2.h>
#include <windows.h>
#define CONFIGFILE "config.ini"
#define MAX_DATATIME_SIZE 60
FILE* g_hLogFile; // Handle of log file
SOCKET g_CSocket; // Socket used to comm with Server
BOOL g_bEnabled; // Signal to block thread operation
BOOL g_bQuit; // Global quit flag
BOOL g_bTCPThreadSuccess;// Whether the TCP thread function return true
BOOL g_bUDPThreadSuccess;// Whether the UDP thread function return true
TCHAR ServerName[20], ServerIP[20], nPort[10];
char LogFileDate[8+1];
u_short ServerPort;
SOCKADDR_IN g_CAddr;
char response[4096];
char *msg = "HELLO SERVER, I AM CLIENT!";
BOOL WriteLogInfo(const TCHAR* szFormat,...)
{
va_list maker;
if ( g_hLogFile != NULL )
{
va_start(maker,szFormat);
vfprintf(g_hLogFile,szFormat,maker);
va_end(maker);
fflush(g_hLogFile);
return TRUE;
}
return FALSE;
}
void GetSystemDateTime(char* szDateTime,int nSize)
{
char tmpDate[8+1];
char tmpTime[6+1];
memset(szDateTime,0,nSize);
memset(tmpDate,0,9);
memset(tmpTime,0,7);
// can't get the system time,set the title to 19 *
if ( !GetDateFormat(LOCALE_SYSTEM_DEFAULT,0,NULL,"yyyyMMdd",tmpDate,9) ||
!GetTimeFormat(LOCALE_SYSTEM_DEFAULT,0,NULL,"HHmmss",tmpTime,7) )
{
memset(szDateTime,'*',19);
return;
}
// format the date and time to the style of
// "*******************2000/08/10,10:36:42*******************"
lstrcpy(szDateTime,"*******************");
strncat(szDateTime,tmpDate,4);
lstrcat(szDateTime,"/");
strncat(szDateTime,tmpDate+4,2);
lstrcat(szDateTime,"/");
strncat(szDateTime,tmpDate+6,2);
lstrcat(szDateTime,",");
strncat(szDateTime,tmpTime,2);
lstrcat(szDateTime,":");
strncat(szDateTime,tmpTime+2,2);
lstrcat(szDateTime,":");
strncat(szDateTime,tmpTime+4,2);
lstrcat(szDateTime,"*******************");
}
BOOL InitLOGFile()
{
char sysDateTime[MAX_DATATIME_SIZE];
char LOGFILE[24];
char tmpDate[8];
// Init global variables
g_bEnabled = TRUE;
g_bTCPThreadSuccess = FALSE;
g_bUDPThreadSuccess = FALSE;
g_bQuit = FALSE;
g_hLogFile = NULL;
memset(LOGFILE, 0, 24);
memset(tmpDate, 0, 9);
GetDateFormat(LOCALE_SYSTEM_DEFAULT,0,NULL,"yyyyMMdd",tmpDate,9);
strncpy(LOGFILE, ".\\Log\\", sizeof(".\\Log\\"));
strncat(LOGFILE, "Client", sizeof("Client"));
strncat(LOGFILE, tmpDate, sizeof(tmpDate));
strncat(LOGFILE, ".log", sizeof(".log"));
if ( (g_hLogFile=fopen(LOGFILE,"a+")) == NULL )
{
// Can't create log file in current directory ".\Log"
if ( CreateDirectory( ".\\Log", NULL ) == 0 )
{
WriteLogInfo(" \n Error: Can't create log file in current directory!\n");
return FALSE;
}
// Can't open log file
if ( (g_hLogFile=fopen( LOGFILE,"a+" )) == NULL )
{
WriteLogInfo(" \n Error: Can't open log file!\n");
return FALSE;
}
}
// Get the system time and put it to the log file
GetSystemDateTime(sysDateTime,MAX_DATATIME_SIZE);
WriteLogInfo("\n\n%s\n",sysDateTime);
WriteLogInfo("Start test jxnClient\n\n");
return TRUE;
}
BOOL InitCfgFile()
{
GetPrivateProfileString("Server", "ServerName", "Betrue", ServerName, 20, CONFIGFILE);
GetPrivateProfileString("Server", "ServerIP", "0.0.0.0", ServerIP, 20, CONFIGFILE);
GetPrivateProfileString("Server", "ServerPort", "0", nPort, 10, CONFIGFILE);
if ( strcmp(ServerName, "Betrue") == 0 || strcmp(ServerIP, "0.0.0.0") == 0 || strcmp(nPort, "0") == 0 )
return FALSE;
ServerPort = (u_short)atoi(nPort);
return TRUE;
}
BOOL InitSockets()
{
WSADATA wsaData;
WORD wVersionRequested;
int err;
g_CSocket = 0;
/* Ask for Winsock 1.1 functionality */
wVersionRequested = MAKEWORD( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 )
{
WriteLogInfo(" \n Error: %d: Winsock not available\n", err);
return FALSE;
}
if ( LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2 )
{
WSACleanup();
WriteLogInfo(" \n Error: Invalid winsock version!\n");
return FALSE;
}
return TRUE;
}
int CleanUp()
{
char sysDateTime[MAX_DATATIME_SIZE];
Sleep(100);
WriteLogInfo(" Pess Key 'CTRL_C'\n" );
WriteLogInfo(" \nEnd test jxnClient\n");
GetSystemDateTime(sysDateTime,MAX_DATATIME_SIZE);
WriteLogInfo("%s\n",sysDateTime);
fclose(g_hLogFile);
closesocket(g_CSocket);
WSACleanup();
Sleep(100);
return 0;
}
BOOL WINAPI ControlHandler ( DWORD dwCtrlType )
{
switch( dwCtrlType )
{
case CTRL_BREAK_EVENT: // use Ctrl+C or Ctrl+Break to simulate
case CTRL_C_EVENT: // SERVICE_CONTROL_STOP in debug mode
case CTRL_CLOSE_EVENT :
case CTRL_LOGOFF_EVENT:
case CTRL_SHUTDOWN_EVENT:
printf("Stopping jxnClient.\n");
CleanUp();
return TRUE;
break;
}
return FALSE;
}
int main()
{
char sysDateTime[MAX_DATATIME_SIZE], buffer[20];
BOOL KeepAlive = TRUE;
int i=0;
SetConsoleCtrlHandler(ControlHandler, TRUE);
GetDateFormat(LOCALE_SYSTEM_DEFAULT, 0, NULL, "yyyyMMdd", LogFileDate,9);
if ( !InitLOGFile() )
{
WriteLogInfo(" Error: InitLOGFile Failed!\n");
WriteLogInfo(" \n End test jxnClient\n");
goto SysError;
}
else
WriteLogInfo(" Ok: InitLOGgFile Succeed!\n");
if ( !InitCfgFile() )
{
WriteLogInfo(" Error: InitCfgFile Failed!\n");
WriteLogInfo(" \n End test jxnClient\n");
goto SysError;
}
else
WriteLogInfo(" Ok: InitCfgFile Succeed!\n");
if ( !InitSockets() )
{
WriteLogInfo(" Error: InitSockets Failed!\n");
WriteLogInfo(" \n End test jxnClient\n");
goto SysError;
}
else
WriteLogInfo(" Ok: InitSockets Succeed!\n");
while(1)
{
GetDateFormat(LOCALE_SYSTEM_DEFAULT, 0, NULL, "yyyyMMdd", sysDateTime, 9);
if(strcmp(LogFileDate, sysDateTime) != 0) //next day logfile
{
strncpy(LogFileDate, sysDateTime, 9);
i = 0;;
fclose(g_hLogFile);
InitLOGFile();
}
i++;
Sleep(100);
g_CSocket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
if (g_CSocket == INVALID_SOCKET)
{
WriteLogInfo(" Error: out of socket resources\n");
WriteLogInfo(" \n End test jxnClient\n");
goto SysError;
}
else
WriteLogInfo(" Ok: Create socket Succeed!\n");
setsockopt(g_CSocket, SOL_SOCKET, SO_KEEPALIVE, (char*)&KeepAlive, sizeof(BOOL));
// if ( (Sockaddr->sin_addr.s_addr=inet_addr(SvrIP)) == INADDR_NONE )
g_CAddr.sin_family = AF_INET;
g_CAddr.sin_port = htons(ServerPort);
if ( ( g_CAddr.sin_addr.s_addr = inet_addr(ServerIP) ) == INADDR_NONE )
{
WriteLogInfo(" \n Error: g_CAddr.sin_addr.s_addr = inet_addr(ServerIP) )!\n");
WriteLogInfo(" \n End test jxnClient i = %d\n", i);
g_CSocket = 0;
goto SysError;
}
if ( connect(g_CSocket,(SOCKADDR*)&g_CAddr,sizeof(SOCKADDR)) != 0 )
{
WriteLogInfo(" \n Error: Can't connect to Server (%s)!\n",ServerIP);
WriteLogInfo(" \n End test jxnClient i = %d\n", i);
printf("Count = %d\n", i);
g_CSocket = 0;
goto SysError;
}
printf("\n Connect to the server succeed!\n");
_itoa( i, buffer, 10 );
// strncat(msg, &buffer, sizeof(buffer));
send (g_CSocket, msg, strlen(msg)+1, 0);
printf("Send MSG(Client2Server): %s\n", msg);
WriteLogInfo(" Send MSG: %s To %s\n", msg, ServerIP);
memset(response, 0, sizeof(response));
recv(g_CSocket, response, sizeof(response), 0);
WriteLogInfo(" Receive MSG: %s By %s\n", response, ServerIP);
printf("recv MSG(Server2Client): %s\n", response);
closesocket(g_CSocket);
}
WriteLogInfo(" \nEnd test jxnClient\n");
GetSystemDateTime(sysDateTime,MAX_DATATIME_SIZE);
WriteLogInfo("%s\n",sysDateTime);
fclose(g_hLogFile);
closesocket(g_CSocket);
WSACleanup();
return 1;
SysError:
GetSystemDateTime(sysDateTime,MAX_DATATIME_SIZE);
WriteLogInfo("%s\n",sysDateTime);
fclose(g_hLogFile);
closesocket(g_CSocket);
WSACleanup();
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -