亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? cmppsocket_bcb.cpp

?? CMPP3.0協(xié)議源碼下載(VC/BCB)支持CMPP_CONNECT,CMPP_TERMINATE,CMPP_SUBMIT,CMPP_ACTIVATE,CMPP_DELIVER等幾條常用指令
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
		//	拷貝數(shù)據(jù)到自己的內存區(qū)域,避免在臨界區(qū)中發(fā)送數(shù)據(jù)
		memcpy( (void *)window, (void *)cmpp._window, sizeof( window));
		//	搜尋并修改到期時間
		for( i=0; i<nCMPP_WINDOW_SIZE; i++)
		{
			//	空位,跳過
			if( cmpp._window[i].head.cmdid == 0)
				continue;
			//	未到發(fā)送時間,跳過
			if( cmpp._window[i].t > time( NULL))
				continue;
			//	設置下一次發(fā)送的時間,當前時間+60秒
			cmpp._window[i].t += 60;
		}
		LeaveCriticalSection( &cmpp._csec_wnd);
		//	搜尋并發(fā)送到期的數(shù)據(jù)
		for( i=0; i<nCMPP_WINDOW_SIZE; i++)
		{
			//	空位,跳過
			if( window[i].head.cmdid == 0)
				continue;
			//	未到發(fā)送時間,跳過
			if( window[i].t > time( NULL))
				continue;
			//	發(fā)送
			nsize = ntohl( window[i].head.size);
			err = cmpp._send( (char *)&window[i], nsize);
			//	發(fā)送出錯,結束線程
			if( err != nsize)
				return 0;
		}
		//	主線程請求退出
		if( cmpp._bexitting)
			break;
	}
	return 0;
}

DWORD	WINAPI	CcmppSocket::thread_recv( LPVOID pdata)
{
	int		err, i;
	long	prevcount;
	FD_SET	fdset;
	TIMEVAL	timeout;
	CcmppSocket		&cmpp = *( CcmppSocket *)pdata;
	CMPP_PACKAGE	pkg;
    memset((void *)&pkg,0,sizeof(pkg));

	FD_ZERO( &fdset);
	FD_SET( cmpp._soc, &fdset);
	//	輪詢間隔1秒
	timeout.tv_sec = 1;
	timeout.tv_usec= 0;
    #ifdef _DEBUG
        _dbgeventlst.push_back("Thread Recieve : Thread Begin.");
    #endif

	for( ;;)
	{
        FD_ZERO( &fdset);
        FD_SET( cmpp._soc, &fdset);
		err = select(
			0,
			&fdset,
			NULL,
			NULL,
			&timeout);
		//	出錯
		if( err == SOCKET_ERROR)
        {
            #ifdef _DEBUG
                sprintf(_dbgtemp,"Thread Recieve : Socket Wait for Data Error.Error Code=%d",WSAGetLastError());
                _dbgeventlst.push_back(_dbgtemp);
            #endif
			continue;//break;
        }
		//	超時
		if( err == 0)
			continue;
		//	先接收包頭部分,以確定包的大小、類型
		err = cmpp._recv( (char *)&pkg.head, sizeof( pkg.head));
		if( err != sizeof( pkg.head))
        {
            #ifdef _DEBUG
                sprintf(_dbgtemp,"Thread Recieve : Recieve Header Return Code=%d Needed Length=%d Error=%d.",err,sizeof( pkg.head),WSAGetLastError());
                _dbgeventlst.push_back(_dbgtemp);
            #endif
            continue;//break;
        }
		//	接收包體
		err = cmpp._recv( pkg.data, ntohl( pkg.head.size )-sizeof( pkg.head));
		if( err == SOCKET_ERROR)
        {
            #ifdef _DEBUG
                sprintf(_dbgtemp,"Thread Recieve : Socket Wait for Data Error.Error Code=%d",WSAGetLastError());
                _dbgeventlst.push_back(_dbgtemp);
            #endif
			continue;//break;
        }
        switch (ntohl(pkg.head.cmdid))
        {
            case nCMPP_SUBMIT_RESP:
            {
                CMPP_SUBMIT_RESP & _smtrsp=*(CMPP_SUBMIT_RESP *)&pkg.data;
                if (err!=sizeof(CMPP_SUBMIT_RESP))
                {
                    #ifdef _DEBUG
                        sprintf(_dbgtemp,"Thread Recieve : Data Body Length Error.Length=%d",err);
                        _dbgeventlst.push_back(_dbgtemp);
                    #endif
                    break;
                }
                //	申請數(shù)據(jù)發(fā)送窗口的使用權
                EnterCriticalSection( &cmpp._csec_wnd);
                //	刪除對應流水號的包
                for( i=0; i<nCMPP_WINDOW_SIZE; i++)
                {
                    if( cmpp._window[i].head.cmdid == 0)
                        continue;
                    if( cmpp._window[i].head.seqid == pkg.head.seqid)
                    {
                        cmpp._window[i].head.cmdid = 0;
                        break;
                    }
                }
                LeaveCriticalSection( &cmpp._csec_wnd);
                //	釋放一個窗口格子
                ReleaseSemaphore(
                    cmpp._hsema_wnd,
                    1,
                    &prevcount);
                #ifdef _DEBUG
                    sprintf(_dbgtemp,"Thread Recieve : Recieve CMPP_SUBMIT_RESP CMD. SeqID=%d",ntohl(pkg.head.seqid));
                    _dbgeventlst.push_back(_dbgtemp);
                #endif
                break;
            }
            //2. CMPP_DELIVER
            case nCMPP_DELIVER:
            {
                CMPP_DELIVER & _dlv=*(CMPP_DELIVER *) &pkg.data;
                printf("\nRecieve Data.\n");
                memcpy((void *)_dlv.LinkID,(void *)(_dlv.msgcontent+_dlv.msglen),20);
                _dlv.msgcontent[_dlv.msglen]=0x0;
                _dlv.LinkID[20]='\0';
                printf("  Size: %d\n",ntohl(pkg.head.size));
                printf("  cmdid: %d\n",ntohl(pkg.head.cmdid));
                printf("  seqid: %d\n",ntohl(pkg.head.seqid));
                printf("  msgid: %LX\n",_dlv.msgid);
                printf("  destnumber: %s\n",_dlv.destnumber);
                printf("  serviceid : %s\n",_dlv.serviceid );
                printf("  tppid: %d\n",_dlv.tppid);
                printf("  tpudhi: %d\n",_dlv.tpudhi);
                printf("  msgfmt: %d\n",_dlv.msgfmt);
                printf("  srcnumber : %s\n",_dlv.srcnumber );
                printf("  srctype;: %d\n",_dlv.srctype);
                printf("  delivery: %d\n",_dlv.delivery);
                printf("  msglen;: %d\n",_dlv.msglen);
                printf("  msgcontent: %s\n",_dlv.msgcontent);
                printf("  LinkID    : %s\n",_dlv.LinkID    );
                #ifdef _DEBUG
                    sprintf(_dbgtemp,"Thread Recieve : Recieve CMPP_DELIVER CMD. SeqID=%d",ntohl(pkg.head.seqid));
                    _dbgeventlst.push_back(_dbgtemp);
                #endif

                break;
            }
            //3. CMPP_ACTIVE_TEST_RESP
            case nCMPP_ACTIVE_TEST_RESP:
            {
                #ifdef _DEBUG
                    sprintf(_dbgtemp,"Thread Recieve : Recieve CMPP_ACTIVE_TEST_RESP CMD. SeqID=%d",ntohl(pkg.head.seqid));
                    _dbgeventlst.push_back(_dbgtemp);
                #endif
                break;
            }
            default:
            {
                #ifdef _DEBUG
                    sprintf(_dbgtemp,"Thread Recieve : Recieve CMPP_ACTIVE_TEST_RESP CMD. CMD=%LX SeqID=%d",ntohl(pkg.head.cmdid),ntohl(pkg.head.seqid));
                    _dbgeventlst.push_back(_dbgtemp);
                #endif

            }
        }
		//	主線程請求退出
		if( cmpp._bexitting)
			break;
	}
    #ifdef _DEBUG
        _dbgeventlst.push_back("Thread Recieve : Thread End.");
    #endif

	return 0;

}

/******************************************************************************
*    數(shù)據(jù)接收線程,從端口向數(shù)據(jù)窗口填充數(shù)據(jù)
******************************************************************************/
/*
DWORD WINAPI CcmppSocket::thread_revwnd(LPVOID LParam)
{
/*
    int     err=0;
    char    buff=0;
    for(;;)
    {
        err=WaitForSingleObject(_hsema_rev,1000);
        if (err==WAIT_OBJECT_0)
        {
            err=_recv(&buff,1);
            if (err!=SOCKET_ERROR)
            {
                EnterCriticalSection(_csec_revwnd);
                _revbuff[_prevbuff++]=buff;
                LeaveCriticalSection(_csec_revwnd);
            }
        }
		if( cmpp._bexitting)
			break;
    }

}
*/
/******************************************************************************
*	為了保證線程及時正常退出,設定輪詢間隔為1秒
*	CMPP2.0建議的鏈路檢測間隔為180秒
*	為了兼容各個廠家的實現(xiàn),設為30秒
******************************************************************************/
DWORD	WINAPI	CcmppSocket::thread_actv( LPVOID pdata)
{
	CcmppSocket &cmpp = *( CcmppSocket *)pdata;
	CMPP_HEAD	msg;
	int			c = 0,		//	計數(shù)
				n = 30;		//	等待的秒數(shù)
	for( ;;)
	{
		Sleep( 1000);
		//	主線程請求退出
		if( cmpp._bexitting)
			break;
		if( ++ c < n)
			continue;
		c = 0;
		//	獲得數(shù)據(jù)發(fā)送權利,發(fā)送鏈路測試包
		msg.size = htonl( sizeof( msg));
		msg.cmdid= htonl( nCMPP_ACTIVE_TEST);
		msg.seqid= htonl( cmpp._getseqid());

		cmpp._send( (char *)&msg, sizeof( msg));
	}
	return 0;
}

char * CcmppSocket::_timestamp( char *buf)
{
	time_t tt;
	struct tm *now;

	time( &tt);
	now = localtime( &tt);
	sprintf( buf, "%02d%02d%02d%02d%02d",
		now->tm_mon + 1,
		now->tm_mday,
		now->tm_hour,
		now->tm_min,
		now->tm_sec);
	return buf;
}

__int64	CcmppSocket::_ntoh64( __int64 inval)
{
	__int64 outval = 0;
	for( int i=0; i<8; i++)
		outval = ( outval << 8) + ( ( inval >> ( i * 8)) & 255);

	return outval;
}

__int64	CcmppSocket::_hton64( __int64 inval)
{
	return _ntoh64( inval);
}

int	CcmppSocket::_getseqid()
{
	int id;
	EnterCriticalSection( &_csec_seq);
	id = ++_seqid;
	LeaveCriticalSection( &_csec_seq);
	return id;
}

int	CcmppSocket::_send( char *buf, int len)
{
	int err;

	EnterCriticalSection( &_csec_snd);
	err = send( _soc, buf, len, 0);
	LeaveCriticalSection( &_csec_snd);

	return err;
}

int	CcmppSocket::_recv( char *buf, int len)
{
	int err;

	EnterCriticalSection( &_csec_recv);
	err = recv( _soc, buf, len, 0);
    #ifdef _DEBUG
        //sprintf(_dbgtemp," Recieve Data=%d Needed Length=%d.",err);
        //_dbgeventlst.push_back(_dbgtemp);

        if (err!=SOCKET_ERROR)
        {
            memcpy( (void *)_revp, (void *)buf, err);
            _revp+=err;
            //memset(_revp,0xFF,16);
            //_revp+=16;
        }
    #endif
	LeaveCriticalSection( &_csec_recv);

	return err;
}

int main()
{
#ifdef _DEBUG
    _dbgeventlst.push_back("Begin Of Debug.");
#endif

	CcmppSocket cmpp;

	cmpp.init( "900001", "900001", "127.0.0.1");

	CMPP_SUBMIT msg;
	memset( (void *)&msg, 0, sizeof( msg));
	msg.desttotal = 1;
	strcpy( (char *)msg.destnumbers, "13808425257");
	msg.msglen = 10;
	strcpy( (char *)msg.msgcontent, "0123456789");
	strcpy( (char *)msg.reserve, "abcdefgh");
	strcpy( (char *)msg.msgsrc, "900001");
	msg.pkgnumber=1;
	msg.pkgtotal=1;
	msg.delivery=1;

	for( int i=0; i<10; i++)
    {
        Sleep(100);
		cmpp.Submit( msg);
    }
    printf("Press Return Continue...");
    getchar();
#ifdef _DEBUG
   FILE *_revstream;
   if ((_revstream = fopen("CMPP3REV.LOG", "wb")) != NULL)
   {
        fwrite((void *)_revdebug,_revp-_revdebug,1,_revstream);
        fclose(_revstream);
   }
   std::ofstream fileo;
   fileo.open("CMPP3EVENT.LOG");
   fileo << _dbgeventlst << std::endl;
   fileo.close();

#endif
	return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩高清在线观看| 亚洲综合在线第一页| 97精品久久久久中文字幕| 日日夜夜一区二区| 国产精品久久久久久一区二区三区 | 精品国产乱码久久久久久久久| 成人午夜在线免费| 美女久久久精品| 亚洲一二三四在线观看| 日本一区二区电影| 日韩精品中午字幕| 欧美日韩国产片| 色素色在线综合| jlzzjlzz国产精品久久| 国产呦精品一区二区三区网站| 午夜日韩在线观看| 亚洲精品高清在线观看| 国产精品―色哟哟| 久久久久久久av麻豆果冻| 欧美一区二区视频在线观看| 日本高清不卡视频| 91麻豆文化传媒在线观看| 国v精品久久久网| 国产做a爰片久久毛片| 日韩成人dvd| 丝袜亚洲另类欧美综合| 亚洲一级二级在线| 亚洲一区二区三区精品在线| 亚洲精品乱码久久久久久| 亚洲人成亚洲人成在线观看图片| 中文一区二区完整视频在线观看| 久久久蜜臀国产一区二区| 欧美精品一区二区在线播放| 日韩一区二区免费在线观看| 91麻豆精品久久久久蜜臀| 欧美日韩亚洲综合一区二区三区| 色噜噜狠狠成人中文综合| 日本乱码高清不卡字幕| 欧美自拍偷拍一区| 精品视频在线视频| 欧美丰满少妇xxxbbb| 日韩一区二区精品在线观看| 91精品中文字幕一区二区三区| 91麻豆精品国产综合久久久久久| 日韩一区二区三免费高清| 精品久久久久久久久久久久久久久| 欧美成人女星排名| 欧美精彩视频一区二区三区| 国产精品免费观看视频| 亚洲婷婷综合久久一本伊一区| 亚洲女厕所小便bbb| 亚洲韩国精品一区| 日本午夜精品视频在线观看| 麻豆极品一区二区三区| 国产91对白在线观看九色| 成人av网在线| 欧美亚洲免费在线一区| 在线观看日韩精品| 欧美一级午夜免费电影| 国产午夜精品久久| 亚洲激情av在线| 日本亚洲三级在线| 国产馆精品极品| 色婷婷av一区二区三区软件| 欧美精品自拍偷拍| 久久久91精品国产一区二区三区| 成人欧美一区二区三区| 亚洲成人资源在线| 国产综合色在线| 色婷婷av一区二区三区软件| 日韩小视频在线观看专区| 中文字幕巨乱亚洲| 午夜影院久久久| 国产91精品在线观看| 欧美日韩一区二区三区高清| 精品久久久久久久久久久久包黑料| 日本一区二区三级电影在线观看 | 亚洲成人av电影在线| 蜜臀久久99精品久久久久宅男| 国产精品亚洲视频| 在线观看日产精品| 久久综合网色—综合色88| 国产精品三级电影| 日韩福利视频网| 波多野结衣一区二区三区| 欧美日韩国产精品自在自线| 久久精品一二三| 婷婷开心久久网| 成人动漫在线一区| 日韩免费视频线观看| 亚洲欧洲www| 韩国v欧美v亚洲v日本v| 欧美在线综合视频| 国产欧美精品一区二区三区四区| 亚洲一区中文在线| 粉嫩av一区二区三区| 欧美日韩一区二区三区四区五区| 久久久久久一二三区| 性久久久久久久久久久久| 成人黄色av电影| 久久综合久久鬼色中文字| 夜夜夜精品看看| 波多野结衣中文字幕一区二区三区| 精品视频1区2区| 一区在线中文字幕| 国产一区二区精品久久99| 欧美老肥妇做.爰bbww视频| 中文字幕一区二区在线观看| 韩日av一区二区| 欧美一区二区三区人| 一区二区三区日韩欧美精品 | 韩国v欧美v亚洲v日本v| 欧美日韩国产成人在线免费| 亚洲色图欧洲色图| 不卡的av电影在线观看| 久久久蜜臀国产一区二区| 麻豆成人av在线| 欧美精品在线一区二区| 亚洲国产精品一区二区www| 99精品在线观看视频| 国产欧美日韩在线| 国产精品一区二区三区乱码| 日韩情涩欧美日韩视频| 亚洲成年人网站在线观看| 欧洲一区二区三区免费视频| 日韩一区欧美小说| 99视频在线精品| 中文字幕的久久| 成人免费毛片aaaaa**| 国产色综合久久| 国产99久久久国产精品潘金网站| 26uuu亚洲| 国产a精品视频| 欧美激情在线一区二区| 国产在线精品视频| 国产欧美日韩卡一| 成人午夜精品在线| 国产精品嫩草影院av蜜臀| 丁香五精品蜜臀久久久久99网站 | 日本在线不卡一区| 久久99精品国产.久久久久久| 欧美一级一区二区| 久久精品国产色蜜蜜麻豆| 欧美一区二区三区成人| 免费一级欧美片在线观看| 日韩精品一区二区三区在线| 久久爱另类一区二区小说| 久久亚洲一级片| 国产91对白在线观看九色| 中文字幕在线观看不卡| 色综合久久久久综合体桃花网| 亚洲电影第三页| 日韩欧美国产一区二区在线播放 | 欧美一区二区视频免费观看| 日韩成人免费电影| 精品国产第一区二区三区观看体验| 精品亚洲国内自在自线福利| 国产色婷婷亚洲99精品小说| 成人免费三级在线| 亚洲成人动漫在线免费观看| 欧美一级一区二区| 成人的网站免费观看| 亚洲午夜久久久久中文字幕久| 5566中文字幕一区二区电影 | 不卡在线观看av| 一区二区三区免费观看| 91精品国产综合久久精品app| 国产在线国偷精品产拍免费yy| 国产精品青草久久| 欧美日韩国产首页| 国产一区二区三区观看| 亚洲特级片在线| 91精品国产综合久久婷婷香蕉| 国产一区在线不卡| 亚洲乱码精品一二三四区日韩在线 | 男男视频亚洲欧美| 中文字幕av免费专区久久| 欧美亚一区二区| 国产真实乱偷精品视频免| 一区二区三区在线观看动漫| 日韩亚洲欧美在线| 色欧美日韩亚洲| 国产一区二区在线看| 亚洲国产一区二区视频| 久久亚区不卡日本| 在线观看一区日韩| 国产激情精品久久久第一区二区| 亚洲午夜精品一区二区三区他趣| 国产亚洲精品久| 欧美肥妇毛茸茸| 91丨porny丨在线| 激情文学综合插| 五月天亚洲精品| 亚洲色图制服丝袜| 亚洲精品一区二区在线观看| 在线免费观看日本一区| 国产精品系列在线观看| 免费高清在线一区| 亚洲18影院在线观看| 亚洲欧洲国产专区|