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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? server.c

?? VC++網(wǎng)絡(luò)通信編程實例案例精選》源代碼 第三部分
?? C
?? 第 1 頁 / 共 3 頁
字號:

	// 建立屏幕的高度
	memset(szMessage,'\0',sizeof(szMessage));
	sprintf(szMessage,"%d",iHeight);
	iSent = Transmit(MySocket,szMessage,strlen(szMessage));

	// 接收確認(rèn)
	memset(szMessage,'\0',sizeof(szMessage));
	iRecv = recv(MySocket,szMessage,81,0);
	szMessage[iRecv] = '\0';
}

// 通過socket發(fā)送區(qū)域顯示位圖
int SendRegionDisplay(HWND hWnd,SOCKET MySocket)
{
	char	szMessage[81];
	DWORD	iSent,iRecv;
	int		fSend = FALSE;
	int		iUpdates;
	WORD	wTreeSize;
	DWORD	dwByteTree[768];
	DWORD	dwCodes[514];
	DWORD	dwCompLen,dwLastCompLen;
	BOOL	fTransmit;
	char	*pTempDIB;
	DWORD	dwMinCompress;

	// 指向GDI鏈表的起始位
	iUpdates = 0;
	pGdiNode = GdiStart.pNext;
	while (pGdiNode)
	{
		//為每個網(wǎng)格得到區(qū)域顯示
		fSend = GetRegionDisplay(hWnd);
		// 計算需要發(fā)送的變化的顯示區(qū)域的數(shù)目
		if (fSend)
			iUpdates++;
		// 移動到下一個節(jié)點
		pGdiNode = pGdiNode->pNext;
	}

	// 發(fā)送到客戶端需要更新的顯示區(qū)域的數(shù)目
	memset(szMessage,'\0',sizeof(szMessage));
	sprintf(szMessage,"%d",iUpdates);
	iSent = Transmit(MySocket,szMessage,strlen(szMessage));
	// 接收確認(rèn)
	memset(szMessage,'\0',sizeof(szMessage));
	iRecv = recv(MySocket,szMessage,81,0);
	szMessage[iRecv] = '\0';

	if (iUpdates > 0)
	{
		// 指向GDI鏈表的起始位
		pGdiNode = GdiStart.pNext;
		while (pGdiNode)
		{
			// 如果桌面發(fā)生了變化,則發(fā)送DIB
			if (pGdiNode->Gdi.fChange)
			{
				int		iCompressions = 1;
				//無壓縮
				if (iCompressionLevel == 0) 
				{
					pGdiNode->Gdi.pDIBCompress = (char *)malloc(pGdiNode->Gdi.dwCompress);
					memblast(pGdiNode->Gdi.pDIBCompress,pGdiNode->Gdi.pDIBChange,pGdiNode->Gdi.dwCompress);
					dwSendLen = pGdiNode->Gdi.dwCompress;
				}
				if (iCompressionLevel == 10) // 單遍霍夫曼編碼壓縮
				{
					pGdiNode->Gdi.pDIBCompress = (char *)malloc(pGdiNode->Gdi.dwCompress + 1536);
					// 生成霍夫曼字節(jié)樹字典
					wTreeSize = HuffmanDictionary(pGdiNode->Gdi.pDIBChange,pGdiNode->Gdi.dwCompress,&dwByteTree[0],&dwCodes[0]);
					// 使用霍夫曼壓縮方法壓縮圖片
					dwSendLen = HuffmanCompress(pGdiNode->Gdi.pDIBChange,pGdiNode->Gdi.dwCompress,wTreeSize,&dwByteTree[0],&dwCodes[0],pGdiNode->Gdi.pDIBCompress);
				}
				else if (iCompressionLevel == 11) // 多遍霍夫曼壓縮編碼
				{
					dwMinCompress = pGdiNode->Gdi.dwCompress + 1536;
					pGdiNode->Gdi.pDIBCompress = (char *)malloc(dwMinCompress);
					pTempDIB = (char *)malloc(pGdiNode->Gdi.dwCompress);
					memblast(pTempDIB,pGdiNode->Gdi.pDIBChange,pGdiNode->Gdi.dwCompress);
					iCompressions = 0;
					dwCompLen = pGdiNode->Gdi.dwCompress;
					dwLastCompLen = dwCompLen;
					for (;;)
					{
						// 生成霍夫曼字節(jié)樹字典
						wTreeSize = HuffmanDictionary(pTempDIB,pGdiNode->Gdi.dwCompress,&dwByteTree[0],&dwCodes[0]);
						// 計算壓縮長度
						dwCompLen = HuffmanCountCompress(pTempDIB,dwCompLen,wTreeSize,&dwCodes[0]);
						if (dwCompLen < dwMinCompress)
						{
							dwSendLen = HuffmanCompress(pTempDIB,dwLastCompLen,wTreeSize,&dwByteTree[0],&dwCodes[0],pGdiNode->Gdi.pDIBCompress);
							memblast(pTempDIB,pGdiNode->Gdi.pDIBCompress,dwSendLen);
							dwMinCompress = dwSendLen;
							dwLastCompLen = dwCompLen;
							iCompressions++;
						}
						else
							break;
					}
					free(pTempDIB);
				}
				else if (iCompressionLevel == 12) // Run Length編碼
				{
					//為最壞的情況分配壓縮空間
					pGdiNode->Gdi.pDIBCompress = (char *)malloc(pGdiNode->Gdi.dwCompress * 3 + 4);
					// Run Length編碼圖象
					dwSendLen = RunLengthEncode(pGdiNode->Gdi.pDIBChange,pGdiNode->Gdi.dwCompress,pGdiNode->Gdi.pDIBCompress);
				}
				else if (iCompressionLevel == 13) // Run Length&Huffman編碼
				{
					pTempDIB = (char *)malloc(pGdiNode->Gdi.dwCompress * 3 + 4);
					pGdiNode->Gdi.pDIBCompress = (char *)malloc(pGdiNode->Gdi.dwCompress * 3 + 4);
					// Run Length 編碼圖象
					dwCompLen = RunLengthEncode(pGdiNode->Gdi.pDIBChange,pGdiNode->Gdi.dwCompress,pTempDIB);
					// 生成霍夫曼字節(jié)樹的字典
					wTreeSize = HuffmanDictionary(pTempDIB,dwCompLen,&dwByteTree[0],&dwCodes[0]);
					// 使用霍夫曼壓縮Run Lenght編碼的圖象
					dwSendLen = HuffmanCompress(pTempDIB,dwCompLen,wTreeSize,&dwByteTree[0],&dwCodes[0],pGdiNode->Gdi.pDIBCompress);
					// 釋放臨時的DIB
					free(pTempDIB);
				}

				// 建立位圖控制消息
				memset(szMessage,'\0',sizeof(szMessage));
				sprintf(szMessage,"%d;%d;%d;%ld;%ld;%ld;",
					iCompressions,
					pGdiNode->Gdi.iGridX,pGdiNode->Gdi.iGridY,
					pGdiNode->Gdi.iStartPos,
					pGdiNode->Gdi.dwCompress,dwSendLen);
				// 發(fā)送控制消息
				iSent = Transmit(MySocket,szMessage,strlen(szMessage));

				// 接收確認(rèn)
				memset(szMessage,'\0',sizeof(szMessage));
				iRecv = recv(MySocket,szMessage,81,0);
				szMessage[iRecv] = '\0';

				// 發(fā)送壓縮的DIB
				fTransmit = Transmit(MySocket,pGdiNode->Gdi.pDIBCompress,dwSendLen);
				// 釋放壓縮的DIB
				free(pGdiNode->Gdi.pDIBCompress);
				// 接收確認(rèn)
				memset(szMessage,'\0',sizeof(szMessage));
				iRecv = recv(MySocket,szMessage,81,0);
				szMessage[iRecv] = '\0';
			}
			pGdiNode = pGdiNode->pNext;
		}
	}
	return iUpdates;
}

//傳輸數(shù)據(jù)到客戶端
BOOL Transmit(SOCKET MySocket,char *pData,DWORD dwLength)
{
	WSAOVERLAPPED	olSend;
	WSAEVENT	gheventOlSock;
	WSAEVENT	eventArray[2];
	WSABUF		buffSend;
	DWORD		dwRet,dwNumBytes,dwFlags;
	int			nWSAError;
	char		szError[81];

	// 為發(fā)送完成創(chuàng)建一個信號事件
	gheventOlSock = WSACreateEvent();
	eventArray[0] = gheventOlSock;

	// 初始化重疊發(fā)送的結(jié)構(gòu)
	ZeroMemory(&olSend, sizeof(WSAOVERLAPPED));
	// 為發(fā)送重疊結(jié)構(gòu)創(chuàng)建一個信號時間
	olSend.hEvent= gheventOlSock;
	buffSend.len = dwLength;
	buffSend.buf = pData;
	// 持續(xù)發(fā)送,直到dwSendLen個字節(jié)被發(fā)送完成
	while (TRUE)
	{
		if ((dwRet = WSASend(MySocket,&buffSend,1,&dwNumBytes,0,&olSend,NULL)) == SOCKET_ERROR)
		{
			nWSAError= WSAGetLastError();
			if (nWSAError != ERROR_IO_PENDING)
			{
				sprintf(szError,"WSASend failed with error %d\n",nWSAError);
				MessageBox(NULL,szError,"Server",MB_OK);
			}
		}
	
		if (WSAWaitForMultipleEvents(1,eventArray,FALSE,WSA_INFINITE,FALSE) == WSA_WAIT_FAILED)
		{
			sprintf(szError,"WSAWaitForMultipleEvents failed %d\n", WSAGetLastError());
			MessageBox(NULL,szError,"Server",MB_OK);
		} 
		// 重置gheventOlSock
		WSAResetEvent(eventArray[0]);
		if (WSAGetOverlappedResult(MySocket,&olSend,&dwNumBytes,FALSE,&dwFlags) == FALSE)
		{
			sprintf(szError,"WSAGetOverlappedResult failed with error %d\n", WSAGetLastError());
			MessageBox(NULL,szError,"Server",MB_OK);
		}
		buffSend.len -= dwNumBytes;
		if (buffSend.len == 0) 
			break;
		else 
			buffSend.buf += dwNumBytes;
	}

	// 關(guān)閉信號事件
	WSACloseEvent(gheventOlSock);
	return TRUE;
}

//返回本機(jī)安裝的所有的有XP1_GUARANTEED_DELIVERY and XP1_GUARANTEED_ORDER標(biāo)志的協(xié)議和協(xié)議鏈
int SelectProtocols(DWORD dwSetFlags,DWORD dwNotSetFlags,LPWSAPROTOCOL_INFO lpProtocolBuffer,LPDWORD lpdwBufferLength,WSAPROTOCOL_INFO *pProtocol)
{
	LPBYTE				pBuf;
	LPWSAPROTOCOL_INFO	pInfo;
	DWORD				dwNeededLen;
	LPWSAPROTOCOL_INFO	pRetInfo;
	DWORD				dwRetLen;
	int					nCount;
	int					nMatchCount;
	int					nRet;

	// 決定需要的緩沖區(qū)大小
	dwNeededLen = 0;
	nRet = WSAEnumProtocols(NULL, NULL, &dwNeededLen);
	if (nRet == SOCKET_ERROR)
	{
		if (WSAGetLastError() != WSAENOBUFS)
			return SOCKET_ERROR;
	}
	// 分配大小
	pBuf = malloc(dwNeededLen);
	if (pBuf == NULL)
	{
		WSASetLastError(WSAENOBUFS);
		return SOCKET_ERROR;
	}

	nRet = WSAEnumProtocols(NULL,(LPWSAPROTOCOL_INFO)pBuf,&dwNeededLen);
	if (nRet == SOCKET_ERROR)
	{
		free(pBuf);
		return SOCKET_ERROR;
	}

	#define REJECTSET(f) \
	    ((dwSetFlags & f) && !(pInfo->dwServiceFlags1 & f))
	#define REJECTNOTSET(f) \
	    ((dwNotSetFlags &f) && (pInfo->dwServiceFlags1 & f))
	#define REJECTEDBY(f) (REJECTSET(f) || REJECTNOTSET(f))

	pInfo = (LPWSAPROTOCOL_INFO)pBuf;	
	pRetInfo = lpProtocolBuffer;
	dwRetLen = 0;
	nMatchCount = 0;
	for(nCount = 0; nCount < nRet; nCount++)
	{
		while(1)
		{
			if (REJECTEDBY(XP1_CONNECTIONLESS))
				break;
			if (REJECTEDBY(XP1_GUARANTEED_DELIVERY))
				break;
			if (REJECTEDBY(XP1_GUARANTEED_ORDER))
				break;
			if (REJECTEDBY(XP1_MESSAGE_ORIENTED))
				break;
			if (REJECTEDBY(XP1_PSEUDO_STREAM))
				break;
			if (REJECTEDBY(XP1_GRACEFUL_CLOSE))
				break;
			if (REJECTEDBY(XP1_EXPEDITED_DATA))
				break;
			if (REJECTEDBY(XP1_CONNECT_DATA))
				break;
			if (REJECTEDBY(XP1_DISCONNECT_DATA))
				break;
			if (REJECTEDBY(XP1_SUPPORT_BROADCAST)) 
				break;
			if (REJECTEDBY(XP1_SUPPORT_MULTIPOINT))
				break;
			if (REJECTEDBY(XP1_MULTIPOINT_DATA_PLANE))
				break;
			if (REJECTEDBY(XP1_QOS_SUPPORTED))
				break;
			if (REJECTEDBY(XP1_UNI_SEND))
				break;
			if (REJECTEDBY(XP1_UNI_RECV))
				break;
			if (REJECTEDBY(XP1_IFS_HANDLES))
				break;
			if (REJECTEDBY(XP1_PARTIAL_MESSAGE))
				break;

			dwRetLen += sizeof(WSAPROTOCOL_INFO);

			if (dwRetLen > *lpdwBufferLength)
			{
				WSASetLastError(WSAENOBUFS);
				*lpdwBufferLength = dwNeededLen;
				free(pBuf);
				return SOCKET_ERROR;
			}
			nMatchCount++;
			// 拷貝協(xié)議到調(diào)用者的buffer里
			memblast(pRetInfo,pInfo,sizeof(WSAPROTOCOL_INFO));
			if (strcmp(pInfo->szProtocol,"MSAFD Tcpip [TCP/IP]") == 0)
				memblast(pProtocol,pInfo,sizeof(WSAPROTOCOL_INFO));
			pRetInfo++;
			break;
		}
		pInfo++;
	}
	free(pBuf);
	*lpdwBufferLength = dwRetLen;
	return(nMatchCount);
}

void memblast(void* dest,void* src,DWORD count)
{
	DWORD	iCount;

	__asm
	{
		MOV		ECX,count
		SHR		ECX,2
		SHL		ECX,2
		MOV		iCount,ECX

		MOV		ESI,src
		MOV		EDI,dest
		MOV		ECX,iCount
		SHR		ECX,2	
		REP		MOVSD	

		MOV		ECX,count
		MOV		EAX,iCount
		SUB		ECX,EAX

		JZ		Exit

		MOV		ESI,src	
		ADD		ESI,EAX	
		MOV		EDI,dest	
		ADD		EDI,EAX		
		REP		MOVSB		
		Exit:
	}
}
/*
int GetLocalHostName(char* sHostName)	//獲得本地計算機(jī)名稱
{
	char szHostName[256];
	int nRetCode;
	nRetCode=gethostname(szHostName,sizeof(szHostName));
	if(nRetCode!=0)
	{
		//產(chǎn)生錯誤
		strcpy(sHostName,"沒有取得");
		return GetLastError();
	}
	strcpy(sHostName,szHostName);
	return 0;
}
int GetIpAddress(char *sHostName, BYTE *f0,BYTE *f1,BYTE *f2,BYTE *f3)//獲得本地IP
{
	struct hostent FAR * lpHostEnt=gethostbyname(sHostName);
	if(lpHostEnt==NULL)
	{
		//產(chǎn)生錯誤
		f0=f1=f2=f3=0;
		return GetLastError();
	}
	//獲取IP
	if(lpHostEnt->h_addr_list[0])
	{
		struct in_addr inAddr;
		memmove(&inAddr,lpHostEnt->h_addr_list[0],4);
		*f0=inAddr.S_un.S_un_b.s_b1;
		*f1=inAddr.S_un.S_un_b.s_b2;
		*f2=inAddr.S_un.S_un_b.s_b3;
		*f3=inAddr.S_un.S_un_b.s_b4;
	}
	return 0;
}
*/

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
av一区二区三区| 免费成人性网站| 91麻豆免费在线观看| 国产精品亲子乱子伦xxxx裸| 成人午夜电影网站| 亚洲靠逼com| 欧美日韩一区中文字幕| 免费在线观看日韩欧美| 精品久久久久久综合日本欧美| 国内精品视频一区二区三区八戒| 久久久久久久久久电影| 本田岬高潮一区二区三区| 亚洲自拍都市欧美小说| 8x8x8国产精品| 国产一区美女在线| 亚洲视频一二三区| 欧美猛男男办公室激情| 日本道色综合久久| 亚洲一区二区影院| 欧美mv和日韩mv国产网站| 亚洲精品免费一二三区| jiyouzz国产精品久久| 亚洲欧美经典视频| 制服.丝袜.亚洲.中文.综合 | 欧美精品一区二区三区蜜桃视频| 国产一区二区调教| 亚洲精品国产一区二区精华液| 欧美裸体一区二区三区| 国产成a人无v码亚洲福利| 亚洲一区二区在线观看视频| 欧美一级午夜免费电影| 成人黄色a**站在线观看| 亚洲bdsm女犯bdsm网站| 国产欧美一区二区在线观看| 欧美日韩一区二区在线观看视频 | 51精品视频一区二区三区| 久久不见久久见免费视频1| 中文字幕日韩一区二区| 日韩一区二区视频| 91一区二区三区在线观看| 蜜臀久久久久久久| 亚洲乱码中文字幕综合| 精品日韩在线一区| 欧美色爱综合网| 成人免费观看av| 久久精品国产77777蜜臀| 亚洲嫩草精品久久| 国产亚洲精品bt天堂精选| 欧美日本在线观看| 91女人视频在线观看| 国产综合色在线视频区| 亚洲成人资源网| 亚洲欧美电影院| 国产精品日日摸夜夜摸av| 欧美电影免费观看高清完整版在| 在线免费不卡电影| av欧美精品.com| 国产精品一区在线观看乱码| 日韩一区精品视频| 亚洲精品高清视频在线观看| 欧美国产禁国产网站cc| 精品国产污污免费网站入口| 欧美一区二区三区视频免费播放| 99精品视频中文字幕| 国产精品88av| 久久精品国产澳门| 欧美aa在线视频| 亚洲一区二区三区自拍| 中文字幕在线观看不卡| 国产精品美女久久久久aⅴ| 国产亚洲一本大道中文在线| 精品久久久久久久一区二区蜜臀| 欧美一级淫片007| 欧美一区二区观看视频| 欧美一区日韩一区| 91精品国产手机| 欧美久久久影院| 91精品麻豆日日躁夜夜躁| 欧美精品一卡二卡| 91精品国产美女浴室洗澡无遮挡| 欧美色图在线观看| 制服丝袜中文字幕一区| 欧美一区二区三区四区五区| 一区二区三区免费网站| 亚洲男同性视频| 亚洲高清在线精品| 全部av―极品视觉盛宴亚洲| 美女脱光内衣内裤视频久久影院| 美腿丝袜亚洲一区| 精品一区二区免费在线观看| 精一区二区三区| 国产成人精品亚洲午夜麻豆| 成人高清免费观看| 欧洲精品视频在线观看| 欧美日韩一区二区三区在线| 欧美夫妻性生活| 欧美不卡一区二区| 中文字幕国产一区| 亚洲综合一二三区| 美女尤物国产一区| 高清beeg欧美| 色偷偷成人一区二区三区91| 欧美日韩国产在线观看| 精品少妇一区二区三区日产乱码| 国产亚洲一本大道中文在线| 最新国产精品久久精品| 亚洲电影中文字幕在线观看| 久久69国产一区二区蜜臀| 国产一区二区日韩精品| 91丝袜国产在线播放| 欧美日韩国产精品成人| 久久久综合视频| 亚洲精品免费在线播放| 麻豆精品在线视频| 99久久精品免费看| 日韩一二三区视频| 中文字幕亚洲在| 麻豆专区一区二区三区四区五区| 丁香六月久久综合狠狠色| 欧美日韩一级黄| 国产欧美日韩亚州综合| 日韩电影在线观看网站| 成人一区二区三区| 欧美一二三四区在线| 亚洲欧洲日产国产综合网| 青青草成人在线观看| 91玉足脚交白嫩脚丫在线播放| 91精品国产色综合久久ai换脸| 国产精品国产馆在线真实露脸 | 欧美一区二区三区免费视频| 国产精品女主播av| 久久精品国产久精国产| 欧美亚洲动漫制服丝袜| 国产午夜精品久久久久久久| 亚洲成a人片在线观看中文| 福利一区在线观看| 精品国内二区三区| 婷婷成人综合网| 色哟哟国产精品| 国产欧美一区二区精品忘忧草 | 麻豆视频观看网址久久| 色天使久久综合网天天| 国产日韩欧美制服另类| 久久se这里有精品| 3751色影院一区二区三区| 亚洲另类在线视频| 成人aa视频在线观看| 国产亚洲制服色| 激情综合色综合久久| 欧美一区二区黄色| 天堂va蜜桃一区二区三区| 在线观看日韩电影| 亚洲视频狠狠干| 不卡一二三区首页| 中文字幕乱码日本亚洲一区二区| 久久成人麻豆午夜电影| 日韩一区二区三区四区五区六区 | 爽爽淫人综合网网站| 色成人在线视频| 亚洲色欲色欲www| 成人动漫中文字幕| 国产精品日韩成人| 高清成人在线观看| 欧美国产精品一区| 成人综合婷婷国产精品久久免费| 久久夜色精品国产欧美乱极品| 全部av―极品视觉盛宴亚洲| 欧美一区二区三区影视| 日韩 欧美一区二区三区| 欧美日本一区二区| 午夜精品福利久久久| 欧美日韩不卡一区二区| 天天综合色天天| 欧美日韩一级二级三级| 婷婷中文字幕综合| 欧美一级高清片在线观看| 麻豆国产欧美一区二区三区| 欧美sm极限捆绑bd| 国产乱人伦偷精品视频不卡 | 午夜精品国产更新| 制服丝袜国产精品| 蜜桃久久久久久| 国产亚洲精品bt天堂精选| 成人高清伦理免费影院在线观看| 1024成人网色www| 色噜噜狠狠色综合欧洲selulu| 亚洲另类在线视频| 欧美精品久久天天躁| 久久精品国内一区二区三区| 久久久久久亚洲综合影院红桃| 丁香桃色午夜亚洲一区二区三区| 日韩毛片精品高清免费| 欧美三区在线视频| 美女mm1313爽爽久久久蜜臀| 久久蜜桃av一区精品变态类天堂| 成人h动漫精品| 亚洲电影你懂得| 久久综合色天天久久综合图片| 成人福利视频在线| 日日骚欧美日韩|