|
#ifndef BOGDAN_RECHI_DDDOI_RTCLASS_H__
#define BOGDAN_RECHI_DDDOI_RTCLASS_H__
#include <stdio.h>
#include <stdarg.h>
#include <atlbase.h>
#include <Winsock2.h>
class TraceClass
{
BOOL m_bConnected;
SOCKET m_sock;
TCHAR m_szName[50];
public:
TCHAR m_szError[50];
TraceClass()
{
WSADATA wsaData;
// m_szError.Empty();
*m_szError=0;
m_bConnected=FALSE;
if (WSAStartup(0x0202,&wsaData))
{
// m_szError.Format("Cannot startup sockets library!");
wsprintf(m_szError, _T("Cannot startup sockets library!"));
return;
}
}
BOOL SetTarget(LPCTSTR szIP, LPCTSTR szName, short nPort)
{
USES_CONVERSION;
struct sockaddr_in serv;
struct sockaddr_in client;
// m_szName.Format("%s", szName);
wsprintf(m_szName, _T("%s"), szName);
if (m_bConnected)
{
shutdown(m_sock, 2);
closesocket(m_sock);
}
if ((m_sock=socket(AF_INET, SOCK_DGRAM, 0))==
INVALID_SOCKET)
{
// m_szError.Format("Cannot create socket!");
wsprintf(m_szError, _T("Cannot create socket!"));
return FALSE;
}
memset((void *)&serv, 0, sizeof(serv));
serv.sin_family = AF_INET;
serv.sin_addr.s_addr = inet_addr(T2A(const_cast<LPTSTR>(szIP)));
serv.sin_port = htons(nPort);
memset((void *)&client, 0, sizeof(client));
client.sin_family = AF_INET;
try
{
if (bind(m_sock, (struct sockaddr*)&client,
sizeof(client))==SOCKET_ERROR)
throw (_T("Error on binding the socket!"));
if (!(m_bConnected=SOCKET_ERROR != connect(m_sock,
(struct sockaddr*)&serv, sizeof(serv))))
throw _T("Error on connecting to socket!");
}
catch (LPTSTR szMan)
{
lstrcpy(m_szError, szMan);
shutdown(m_sock, 2);
closesocket(m_sock);
return FALSE;
}
return TRUE;
}
BOOL Trace(LPCTSTR fmt, ...)
{
USES_CONVERSION;
if (!m_bConnected) return FALSE;
TCHAR *buff=new TCHAR[1024], *szFin;
char sz[100];
va_list param;
SYSTEMTIME st;
va_start( param, fmt);
// buff.FormatV(fmt, param);
for (int i=1; _vsntprintf(buff, i*1024, fmt,
param)==-1; i++)
{
delete [] buff;
buff=new TCHAR[(i+1)*1024];
}
va_end( param );
szFin=new TCHAR[110+lstrlen(m_szName)+lstrlen(_T("[22:22:22] "))
+lstrlen(buff)];
gethostname(sz, 100);
GetLocalTime(&st);
// note begin
// protocol: machine name"application name" text
// " is used
wsprintf(szFin, _T("%s\"%s\" [%d:%d:%02d] %s"), A2T(sz), m_szName,
st.wHour, st.wMinute, st.wSecond, buff);
// note end
delete [] buff;
if (send(m_sock, (char *)szFin, lstrlen(szFin)*sizeof(TCHAR),
0)==SOCKET_ERROR)
{
// m_szError.Format("Error on sending message!");
wsprintf(m_szError, _T("Error on sending message!"));
return FALSE;
}
delete [] szFin;
return TRUE;
}
~TraceClass()
{
shutdown(m_sock, 2);
closesocket(m_sock);
WSACleanup();
}
};
#endif
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.