?? winserv2.cpp
字號:
#include "caSocket.h"
#include "stdlib.h"
#include "stdio.h"
#include "process.h"
#include "DealAll.h"
#include "Dlodbc.h"
#include "dhodbc.h"
#include "certcreate.h"
#define BUFLEN 18000
#define PACKLEN 2400
caSocket m_Socket; // Our winSocket wrapper class
BOOL m_bConnected; // Boolean representing state of application
caSocket abc;
DBCONN dbconn[MAXDBCONN];
HANDLE hMutex=NULL;
int g_nDebug=0;
#define INIFILE "c:\\fgcca3.ini"
struct param {
SOCKET m_socket;
};
unsigned int __stdcall FirstThread(void *pAcceptSocket)
{
char szRcvBuf[BUFLEN];
char szSndBuf[BUFLEN];
caSocket def;
int nRtn;
int OutDataLen;
// printf("ThreadID = %d SocketID=%d\n",GetCurrentThreadId(),*(SOCKET *)AcceptSocket);
if(g_nDebug)
printf("ThreadID=%d,SocketID=%d\n",GetCurrentThreadId(),*(SOCKET *)pAcceptSocket);
def.m_hSocket = *(SOCKET *)pAcceptSocket;
// def.m_hSocket = par->m_socket;
memset(szRcvBuf,0,sizeof(szRcvBuf));
nRtn = def.ExpRead(szRcvBuf,BUFLEN);
// printf("recv nTotal = %d\n",nRtn);
nRtn = DealAll(szRcvBuf,nRtn,szSndBuf,BUFLEN,&OutDataLen);
if(g_nDebug)
printf("DealAll RTN = %d\n",nRtn);
// memset(szRcvBuf,'8',sizeof(szRcvBuf));
nRtn = def.ExpWrite(szSndBuf,OutDataLen);
// printf("Snd %d\n",nRtn);
nRtn = def.Close();
if(nRtn != 0)
printf("Close Error\n");
_endthreadex(0);
return 0;
}
void main(int argc,char **argv)
{
int nRtn=0,i=0,nTotal=0;
// SOCKET AcceptSocket;
SQLHDBC hdbc=NULL;
unsigned char databasename[30];//="fgog";
unsigned char username[30];//="ca";
unsigned char password[30];//="fourgold";
char szIpAddr[30];
char szPvkPw[64]="";
unsigned int nPort=0;
SOCKET pAcceptSocket[5000];
int MAXSOCK=5000;
//General a CA keypair and CA root certificate
if(argc > 2)
{
if(strncmp(argv[1],"cainit",6) == 0)
{
strcpy(szPvkPw,argv[2]);
nRtn = CACreateCertificate(
"CAcert.cer", //根證書導出到該證書文件
"CAKEY.pvk", //簽名公私鑰保存文件
"CAXKEY.pvk", //交換公私鑰保存文件
"CAXKEY.pub", //交換公鑰保存文件
szPvkPw); //密鑰文件口令
if(nRtn != 0)
{
printf("INIT CA FAIL = %d !\n",nRtn);
return;
}
nRtn = GenSignCert();
if(nRtn != 0)
printf("GenSignCert FAIL = %d !\n",nRtn);
else
printf("INIT CA SUCCESSFUL!\n");
}
if(strncmp(argv[1],"carestore",9) == 0)
{
strcpy(szPvkPw,argv[2]);
nRtn = doRestore("CAcert.cer","CAKEY.pvk","CAXKEY.pvk",szPvkPw);
}
return;
}
// Create a mutex with no initial owner.
hMutex = CreateMutex(
NULL, // no security attributes
FALSE, // initially not owned
"MutexToProtectDatabase"); // name of mutex
if (hMutex == NULL)
{
printf("Create Mutex Error!\n");
return;
}
//get database parameter
GetPrivateProfileString("DATABASE PARA","databasename","fgog",(char *)databasename,sizeof(databasename),INIFILE);
GetPrivateProfileString("DATABASE PARA","username","ca",(char *)username,sizeof(username),INIFILE);
GetPrivateProfileString("DATABASE PARA","password","fourgold",(char *)password,sizeof(password),INIFILE);
//get socket parameter
GetPrivateProfileString("SOCKET PARA","ipaddr","any",(char *)szIpAddr,sizeof(szIpAddr),INIFILE);
nPort = GetPrivateProfileInt("SOCKET PARA","port",6768,INIFILE);
//get debug prarmeter
g_nDebug = GetPrivateProfileInt("DEBUG PARA","debug",1,INIFILE);
for(i=0;i<MAXDBCONN;i++)
{
hdbc=ConnectDB(databasename, strlen((char *)databasename), username, strlen((char *)username), password, strlen((char *)password));
if(hdbc != NULL)
{
dbconn[i].handle = (long)hdbc;
}
else
{
printf("conn db error\n");
return;
}
}
/*
DWORD dwSerialNum;
nRtn = DBGetSetSerial(&dwSerialNum);
ISUCERT* p=NULL;
DBInsertCertReq(p,dwSerialNum);
DBInsertCert(111,(unsigned char *)"asdfasdfasdf",12);
*/
if( abc.Create() != ERR_SUCCESS ) // Create the socket
return;
nRtn = abc.Bind(szIpAddr,nPort);
nRtn = abc.Listen(5);
unsigned int dwThreadId;
HANDLE hThread;
int j=-1;
while(1)
{
j++;
if(j == MAXSOCK-1)
j=0;
for(i=0;i<MAXDBCONN;i++)
{
if(dbconn[i].status == 1)
printf("dbconn[%d]:%d,%d,%d\n",i,dbconn[i].handle,dbconn[i].status,dbconn[i].threadid);
}
printf("\n\n");
// SOCKET *pAcceptSocket = new SOCKET;
pAcceptSocket[j] = abc.Accept();
// *pAcceptSocket = abc.Accept();
if(pAcceptSocket[j] == ERR_WSAERROR)
continue;
// _beginthread(FirstThread,0,(void *) &AcceptSocket);
hThread = (HANDLE) _beginthreadex(
NULL,
0,
FirstThread,
(void*)&pAcceptSocket[j],//&AcceptSocket,
0,
&dwThreadId);
// printf("ZThreadID = %d ZSocketID=%d\n",dwThreadId,(unsigned int)pAcceptSocket[j]);
// delete pAcceptSocket;
/*
hThread = CreateThread(
NULL, // default security attributes
0, // use default stack size
FirstThread, // thread function
&AcceptSocket, // argument to thread function
0, // use default creation flags
&dwThreadId); // returns the thread identifier
*/
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -