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

📄 jxnclient.cpp

📁 以前写的一个简单的TCP通信例子
💻 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 + -