示例#1
0
UINT ThreadFunc(LPVOID ThreadArg)
{  
	int nBreathStep = 0;
	unsigned long ul = 1;
	Sleep(WAITFORMAIN_TIME);
	CTaoFlowDlg *pDlg = (CTaoFlowDlg *)ThreadArg;
	pDlg->m_Sock.InitSock();
ConnectToServer:
	int sock = pDlg->m_Sock.ConnectTo(DEFAULT_SERVER_PORT, "192.168.1.2");
	if (sock <= 0)
	{
		pDlg->m_stcDycInfo.SetWindowTextW(_T("连接服务器失败,正在重试"));
		Sleep(RECONNECT_SERVER);
		goto ConnectToServer;
	}
	ioctlsocket(sock, FIONBIO, (unsigned long *)&ul);
LoginToServer:
	//发登录包
	PackHead_T head;
	head.ePType = LoginReq;
	head.eCType = FlowClient;
	LogCli_T body;
	CString strSerial = GetSerialNum();
	CString2Char(strSerial, body.MachCode);
	body.nSecretCode = SECRET_CODE;
	head.nBodySize = sizeof(LogCli_T);
	int flag = sizeof(PackHead_T) + sizeof(LogCli_T);
	std::string str;
	str.resize(flag + PACKSIZE_FLAG);
	memcpy((void *)(str.data()), &flag, PACKSIZE_FLAG);
	memcpy((void *)(str.data() + PACKSIZE_FLAG), &head, sizeof(head));
	memcpy((void *)(str.data() + PACKSIZE_FLAG + sizeof(head)), &body, sizeof(body));
	int n = send(sock, str.data(), flag + PACKSIZE_FLAG, 0);
	if (n >= flag + PACKSIZE_FLAG)
	{
		while (1)
		{
			str.resize(BUFFERSIZE);
			n = recv(sock, (char *)str.data(), BUFFERSIZE, 0);
			if (n >= PACKHEAD_SIZE)
			{
				PackHead_T head;
				memcpy(&head, (void *)(str.data() + PACKSIZE_FLAG), PACKHEAD_SIZE);
				if (head.ePType == BreathRes)
				{
					//重置掉线超时计数器
					g_nTimeout = TIMEOUT_COUNT;
				}
				else
				{
					int flagsize;
					memcpy(&flagsize, (void *)str.data(), PACKSIZE_FLAG);
					if (n >= flagsize)
					{
						switch (head.ePType)
						{
						case LoginRes:
							LogSer_T body;
							memcpy(&body, (void *)(str.data() + PACKSIZE_FLAG + PACKHEAD_SIZE), sizeof(LogSer_T));
							if (body.bOk)
							{
								pDlg->m_stcDycInfo.SetWindowTextW(_T("已成功连接至流量王服务器"));
							}
							else
							{
								Sleep(RECONNECT_SERVER);
								goto LoginToServer;
							}
							break;
						case TaskRes:
							break;
						}
					}
				}
			}
			//发心跳包
			nBreathStep++;
			if (nBreathStep > 30)
			{
				PackHead_T head;
				head.ePType = BreathReq;
				head.eCType = FlowClient;
				head.nBodySize = 0;
				int flag = PACKHEAD_SIZE;
				str.resize(flag + PACKSIZE_FLAG);
				memcpy((void *)(str.data()), &flag, PACKSIZE_FLAG);
				memcpy((void *)(str.data() + PACKSIZE_FLAG), &head, sizeof(head));
				n = send(sock, str.data(), flag + PACKSIZE_FLAG, 0);
				nBreathStep = 0;
			}
			Sleep(READ_TIME_STEP);
			//超时计数器
			g_nTimeout--;
			if (g_nTimeout <= 0)
			{
				pDlg->m_stcDycInfo.SetWindowTextW(_T("从服务器的连接已断开,请检查网络"));
				closesocket(sock);
				goto ConnectToServer;
			}
		}
	}
	else
	{
		closesocket(sock);
		goto LoginToServer;
	}
	closesocket(sock);
	WSACleanup();
	return 0;
}
示例#2
0
void main(void)
 {
  register int  j;
  char          name[31];            /* user name                      */
  char          num[12];             /* serial number string for f f   */
  char          cnum[12];             /* check sum string for fake file */
  char          final[35];        /* final form of info to go to playgame */
  combination   comb;
  char          doover=0;   /* re-get serial number if entered wrong */
  unsigned long int checksum;    /* name/number verification number */
  FILE          *fp;
  char          done=0,skip=0;
  char          drive;
  char          fname[30];
  unsigned long int first=0,second=0,third=0;

  getdate(&Date);

  do
    {
    do
      {  
      doover=0;
      clrscr();
      gotoxy(13, 9);  printf("������������������������ͻ");
      gotoxy(13,10);  printf("� GM V"GMVER" Registration  �");
      gotoxy(13,11);  printf("������������������������͹");
      gotoxy(13,12);  printf("�Disk a,b, or b(o)th:    �");
      gotoxy(13,13);  printf("������������������������ͼ");
      drive = getch();
      switch (drive) 
        {
        case 'o': case 'O':
          drive='O';
        case 'a': case 'A':
        case 'b': case 'B':  break;
        case  13:
        case  27:            done=1; break;
        default :            doover=1; break;
        }
      } while ( (done==0) && (doover==1) );
    if (!done) 
      {
      int i=0;
      num[0]=0;
      gotoxy(13,11);  printf("������������������������ͼ");
      gotoxy(13,12);  printf("���������������������������������������������������ͻ");
      gotoxy(13,13);  printf("�Enter customer name:                               �");
      gotoxy(13,14);  printf("���������������������������������������������������ͼ");
      gotoxy(35,13);
      for (i=0;i<31;i++) name[i]=0;             // Initialize name
      gets(name);
      if (name[0]==0) skip = 1;
      else
        {
        j=0;
        while (name[j]!=0) j++;
        while (j<30) { name[j]=0; j++; }
        }
      }
    if (!done)
      {
      if (drive=='O') done=!(GetSerialNum(&comb.ser,'A'));
      else done=!(GetSerialNum(&comb.ser,drive));
      sprintf(num,"%lu",comb.ser);
      printf("\n\nSerial Number:%s\n",num);
      }
    if (!done)
      {
      if (!skip) 
        {
        first=0; second=0; third=0;
        for (j=0;j<7;j++) first  +=(name[j]&255);
        for (j=7;j<18;j++) second+=(name[j]&255);
        for (j=18;j<30;j++) third+=(name[j]&255);
        checksum = (comb.ser*first) + (second*1143) + (third ^ 0x16AC);
        }
      else checksum = ((unsigned long) rand() + ((unsigned long)rand() * 237));
      sprintf(cnum,"%lu",checksum);

      // Write Registration info
      if (drive=='O') 
        {
        done = !(WriteReg(name,num,cnum,'a'));
        if (!done) done = !(WriteReg(name,num,cnum,'b'));
        }
      else done = !(WriteReg(name,num,cnum,drive));
      }

    if (!done)                  // Write to Playgame and Xferplay
      {
      final[0]='�';
      if (skip) for (j=1;j<29;j++) final[j]=j+64;
      else for (j=1;j<29;j++) final[j]=(21+name[j-1]+5*j);
      final[29]=0;
      final[30]=comb.ord.fir;