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

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

?? cmppsocket_vc.cpp

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

}

/******************************************************************************
*    數據接收線程,從端口向數據窗口填充數據
******************************************************************************/
/*
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秒
*	CMPP3.0建議的鏈路檢測間隔為180秒
*	為了兼容各個廠家的實現,設為30秒
******************************************************************************/
DWORD	WINAPI	CcmppSocket::thread_actv( LPVOID pdata)
{
	CcmppSocket &cmpp = *( CcmppSocket *)pdata;
	CMPP_HEAD	msg;
	int			c = 0,		//	計數
				n = 30;		//	等待的秒數
	for( ;;)
	{
		Sleep( 1000);
		//	主線程請求退出
		if( cmpp._bexitting)
			break;
		if( ++ c < n)
			continue;
		c = 0;
		//	獲得數據發送權利,發送鏈路測試包
		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一区二区三区免费野_久草精品视频
亚洲午夜羞羞片| 毛片av中文字幕一区二区| 欧美日韩一区视频| 国产成人8x视频一区二区| 午夜欧美视频在线观看| 国产精品理论在线观看| 欧美电影一区二区三区| 一本色道久久综合亚洲91| 国产一区二区三区免费| 日韩国产一二三区| 亚洲欧洲综合另类在线| 国产三级一区二区| 欧美一区二区福利在线| 在线欧美日韩精品| a级高清视频欧美日韩| 高清成人免费视频| 黄色日韩网站视频| 日本不卡1234视频| 午夜精品福利一区二区三区av| 中文字幕一区二区三区乱码在线| 精品欧美一区二区久久| 91精品婷婷国产综合久久| 欧美色窝79yyyycom| 91丨porny丨蝌蚪视频| 成人综合在线视频| 国产乱码一区二区三区| 国产综合色视频| 精品一区二区三区日韩| 天天综合色天天| 亚洲第一综合色| 亚洲mv大片欧洲mv大片精品| 一区二区三区高清在线| 亚洲人吸女人奶水| 亚洲三级电影网站| 日韩毛片精品高清免费| 国产精品久久久久影院| 国产精品视频一二| 中文字幕国产精品一区二区| 国产欧美精品一区aⅴ影院| 国产亚洲一区二区三区在线观看| 欧美sm极限捆绑bd| 久久影音资源网| 日本一区二区动态图| 欧美韩日一区二区三区四区| 国产亚洲一二三区| 国产精品青草久久| 亚洲三级在线播放| 亚洲成a人v欧美综合天堂 | 亚洲精品videosex极品| 亚洲人一二三区| 一区二区三区精品在线| 亚洲成人一区在线| 秋霞电影一区二区| 久久国产精品区| 国产成人精品午夜视频免费| jizzjizzjizz欧美| 色噜噜偷拍精品综合在线| 欧美日韩免费观看一区三区| 欧美日韩精品高清| 欧美一级理论片| 久久女同性恋中文字幕| 国产精品无人区| 亚洲已满18点击进入久久| 日日噜噜夜夜狠狠视频欧美人 | 久久五月婷婷丁香社区| 久久久五月婷婷| 中文字幕一区二区三区在线播放| 亚洲sss视频在线视频| 久久66热偷产精品| 91香蕉视频在线| 69成人精品免费视频| 久久亚洲二区三区| 一区二区三区不卡在线观看| 青青青伊人色综合久久| 极品少妇xxxx精品少妇| 99精品国产一区二区三区不卡| 欧美色视频一区| 久久久亚洲国产美女国产盗摄| 亚洲男人的天堂在线aⅴ视频| 蜜桃视频在线观看一区二区| 国产精品亚洲一区二区三区在线| 色综合久久66| 久久综合色婷婷| 一区二区三区日韩在线观看| 久久成人久久鬼色| 91浏览器打开| 精品日韩在线一区| 伊人婷婷欧美激情| 久久超碰97中文字幕| 色一区在线观看| 国产日本亚洲高清| 亚洲成人激情av| 99视频精品全部免费在线| 日韩精品一区在线观看| 亚洲欧美日韩国产中文在线| 国产一区二区三区不卡在线观看 | 91成人网在线| 久久午夜色播影院免费高清| 午夜伊人狠狠久久| 不卡的av中国片| 日韩欧美一卡二卡| 亚洲成人一区在线| 91伊人久久大香线蕉| 久久综合视频网| 免费成人在线视频观看| 欧洲在线/亚洲| 综合在线观看色| 国产精品18久久久久久久久| 777久久久精品| 亚洲一区中文日韩| 波多野结衣在线一区| 国产亚洲制服色| 国产一区二区在线看| 欧美精三区欧美精三区| 国产精品久久久久9999吃药| 国产一区二区看久久| 在线不卡的av| 亚洲成人久久影院| 欧洲一区在线电影| 亚洲美女淫视频| 不卡电影一区二区三区| 欧美经典三级视频一区二区三区| 极品少妇xxxx偷拍精品少妇| 日韩欧美激情四射| 三级精品在线观看| 欧美日韩国产片| 亚洲风情在线资源站| 在线观看三级视频欧美| 亚洲精品成人悠悠色影视| 一本到一区二区三区| 亚洲欧美一区二区三区孕妇| av在线播放一区二区三区| 日本一区二区免费在线观看视频| 国产成人亚洲精品青草天美 | 亚洲欧美日韩在线| 成人激情免费网站| 国产精品入口麻豆九色| 97精品国产97久久久久久久久久久久 | 日本视频免费一区| 在线观看91av| 蜜乳av一区二区| 欧美白人最猛性xxxxx69交| 精品综合免费视频观看| 精品成人a区在线观看| 黄一区二区三区| 国产精品婷婷午夜在线观看| 99精品桃花视频在线观看| 尤物av一区二区| 欧美精品日韩精品| 精品一区二区三区免费视频| 国产欧美一区二区在线观看| 99久久99久久免费精品蜜臀| 一区二区三区中文在线观看| 欧美日韩精品欧美日韩精品一| 天堂精品中文字幕在线| 欧美第一区第二区| 国产精品18久久久| 一区二区三区在线视频观看| 在线不卡的av| 国产夫妻精品视频| 亚洲人成网站在线| 555夜色666亚洲国产免| 国产综合久久久久久久久久久久 | 国产亲近乱来精品视频| 91原创在线视频| 免费欧美日韩国产三级电影| 久久综合久久综合九色| av不卡一区二区三区| 日韩成人免费电影| 国产精品视频在线看| 欧美日韩专区在线| 韩国成人在线视频| 亚洲猫色日本管| 26uuu亚洲婷婷狠狠天堂| 91在线你懂得| 免费在线成人网| 亚洲日本在线视频观看| 欧美一区二区人人喊爽| www.欧美亚洲| 日本伊人精品一区二区三区观看方式| 久久这里只有精品6| 欧美性高清videossexo| 国产乱码精品一区二区三区五月婷 | 国产成人自拍高清视频在线免费播放| 亚洲免费观看视频| 日韩午夜三级在线| 99免费精品视频| 精品一区二区三区影院在线午夜| 樱花影视一区二区| 久久影音资源网| 欧美高清视频在线高清观看mv色露露十八 | 成+人+亚洲+综合天堂| 日本欧美韩国一区三区| 日韩一区欧美小说| 2022国产精品视频| 欧美三级欧美一级| 成人一区二区三区视频在线观看 | 日韩国产成人精品| 亚洲欧美电影一区二区| 国产日韩精品一区二区浪潮av|