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

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

?? main.cpp

?? <B>很多DirectX 9.0游戲編程源碼例子</B>
?? CPP
字號:
//-----------------------------------------------------------------------------
// Name: Sockets_TurnGame
//
// Description: Example code showing how to implement
//				simple turn-based gameplay over TCP/IP
//
// File Function: Main program file (main.cpp)
//
// Code: 
//		Copyright (c) 2003 LostLogic Corporation. All rights reserved.
//
// Libraries Required:
//		ws2_32.lib
//		winmm.lib
//
// Local Files Required:
//		main.h
//		main.cpp
//
//-----------------------------------------------------------------------------

// Main header
#include "main.h"

//
// Function to Create the Window and Display it ( REQUIRED FOR ALL WINDOWS PROGRAMS )
//
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
	MSG			msg;
	HWND		hWnd;
	WNDCLASSEX	wndclass;
	
	// Set up window attributes
	wndclass.cbSize			= sizeof(wndclass);
	wndclass.style			= CS_HREDRAW | CS_VREDRAW;
	wndclass.lpfnWndProc	= fnMessageProcessor;
	wndclass.cbClsExtra		= 0;
	wndclass.cbWndExtra		= 0;
	wndclass.hInstance		= hInstance;
	wndclass.hIcon			= LoadIcon( NULL, IDI_APPLICATION );
	wndclass.hCursor		= LoadCursor( NULL, IDC_ARROW );
	wndclass.hbrBackground	= (HBRUSH)(COLOR_WINDOW);
	wndclass.lpszMenuName	= NULL;
	wndclass.lpszClassName	= lpszApplicationName;	// Registered Class Name
	wndclass.hIconSm		= LoadIcon( NULL, IDI_APPLICATION );

	if( RegisterClassEx( &wndclass ) == 0 ) 
	{
		// Do error logic here
		exit(1);
	}

	// Create the window
	hWnd = CreateWindow(	lpszApplicationName,		// Application Name
							lpszTitle,					// Name Displayed on Title Bar
							WS_OVERLAPPEDWINDOW,
							100,
							100,
							400,
							340,
							NULL,
							NULL,
							hInstance,
							NULL );
	
	// Set global handles
	g_hInst	= hInstance;
	g_hWnd	= hWnd;
	
	// Create child window controls
	vCreateWindowControls( hWnd );

	// Initialize sockets
	vInitializeSockets();
	
	ShowWindow( hWnd, nCmdShow );
	UpdateWindow( hWnd );
	
	// Enter the message loop
    while( msg.message != WM_QUIT ) {
        if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) ) {
            TranslateMessage( &msg );
            DispatchMessage( &msg );
        }
    };

	// Clean up sockets
	vShutdownSockets();

	return(msg.wParam);
}

// -------------------------------------------------------------------------------
LRESULT CALLBACK fnMessageProcessor ( HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam )
{
	switch (iMsg)
    {
		case WM_COMMAND:
			switch(LOWORD(wParam))
			{
				// Check if player wants to connect to the server
				case IDC_hBU_Connect:
					vConnect();
					break;

				// Check if player wants to host the server
				case IDC_hBU_Host:
					vHost();
					break;

				// Signal that I am done taking my turn
				case IDC_hBU_TurnDone:
					PlaySound("button.wav",NULL,SND_FILENAME|SND_ASYNC);
					if( g_bMyTurn ) {
						vTurnDone();
					}
					break;

				default:
					break;
			}
			break;

		case WM_DESTROY:
			PostQuitMessage( 0 );
			break;
			
		default:
			break;
    }
	return DefWindowProc( hWnd, iMsg, wParam, lParam );
}

//
// Function to Initialize window objects
//
void vCreateWindowControls(HWND hWnd)
{
	// hEB_InputServerIP
	hST_TextServerIP = CreateWindow(
		"static","Server IP",
		WS_CHILD | SS_CENTER | WS_VISIBLE,
		5,
		5,
		120,
		28,
		hWnd,(HMENU)IDC_hST_TextServerIP,g_hInst,NULL);

	// hEB_InputServerIP
	hST_TextServerPort = CreateWindow(
		"static","Port",
		WS_CHILD | SS_CENTER | WS_VISIBLE,
		125,
		5,
		50,
		28,
		hWnd,(HMENU)IDC_hST_TextServerPort,g_hInst,NULL);

	// hEB_InputServerIP
	hEB_InputServerIP = CreateWindowEx(
		WS_EX_CLIENTEDGE,
		"EDIT","192.168.0.2",
		WS_CHILD | WS_VISIBLE | WS_BORDER | ES_LEFT,
		5,
		20,
		120,
		28,
		hWnd,(HMENU)IDC_hEB_InputServerIP,g_hInst,NULL);

	// hEB_InputServerPort
	hEB_InputServerPort = CreateWindowEx(
		WS_EX_CLIENTEDGE,
		"EDIT","6001",
		WS_CHILD | WS_VISIBLE | WS_BORDER | ES_LEFT,
		125,
		20,
		50,
		28,
		hWnd,(HMENU)IDC_hEB_InputServerPort,g_hInst,NULL);

	// hLB_Output
	hLB_Output = CreateWindowEx(
		WS_EX_CLIENTEDGE,
		"LISTBOX",
		NULL,
		WS_CHILD | WS_VISIBLE | LBS_NOTIFY | WS_VSCROLL | WS_BORDER,
		5,
		47,
		380,
		230,
		hWnd,(HMENU)IDC_hLB_Output,g_hInst,NULL);	
	
	// hBU_Connect
	hBU_Connect = CreateWindow(
		"BUTTON",
		"Connect",
		WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
		285,
		280,
		100,
		28,
		hWnd,(HMENU)IDC_hBU_Connect,g_hInst,NULL);

	// hBU_Host
	hBU_Host = CreateWindow(
		"BUTTON",
		"Host",
		WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
		175,
		280,
		100,
		28,
		hWnd,(HMENU)IDC_hBU_Host,g_hInst,NULL);
}

//
// Function to Initialize sockets
//
void vInitializeSockets( void )
{
	WSADATA		wsaData;
	WORD		wVersionRequested;

	// Tell WinSock we want version 2
	wVersionRequested = MAKEWORD( 2, 0 );

	// Startup WinSock
	WSAStartup( wVersionRequested, &wsaData );
}

//
// Function to display text into the edit window
//
void vShowText(char *szText)
{
	int Line;
	
	// add string to the listbox
	SendMessage(hLB_Output,LB_ADDSTRING,0,(LPARAM) szText);
	
	// determine number of items in listbox
	Line = SendMessage(hLB_Output,LB_GETCOUNT,0,0);
	
	// flag last item as the selected item, to scroll listbox down
	SendMessage(hLB_Output,LB_SETCURSEL,Line-1,0);
	
	// unflag all items to eliminate negative highlite
	SendMessage(hLB_Output,LB_SETCURSEL,-1,0);
}

//
// Function to host the game.  The host listens on a socket and
// accepts the client connection when it comes in.  Once the client
// is connected, the server waits for the first game turn packet.
//
void vHost( void )
{
	sockaddr_in saServerAddress;
	sockaddr_in saClientAddress;
	int			iClientSize = sizeof(sockaddr_in);
	int			iPort = 6001;
	int			iStatus;

	// ** FOR YOU TO DO **
	// Pull the port number from the
	// windows controls.

	// Set global var
	g_bIsServer = 1;
	
	// Initialize the socket handle
	g_skListenSocket = INVALID_SOCKET;

	// Create the socket
	g_skListenSocket = socket( AF_INET, SOCK_STREAM, 0 );
	
	// Check if there was an error
	if( g_skListenSocket == INVALID_SOCKET ) {
		vShowText( "** ERROR ** Could Not Create Socket" );
		return;
	}

	vShowText( "<- Socket Created ->" );

	// Clear out the socket address structure
	memset(&saServerAddress, 0, sizeof(sockaddr_in));

	// Initialize the socket address structure
	saServerAddress.sin_family = AF_INET;
	saServerAddress.sin_addr.s_addr = htonl( INADDR_ANY );
	saServerAddress.sin_port = htons( iPort );

	// Attempt to bind
	if( bind( g_skListenSocket, (sockaddr*) &saServerAddress, sizeof(sockaddr) ) == SOCKET_ERROR ) {
		vShowText( "** ERROR ** Could Not Bind Socket" );
		return;
	}

	vShowText( "<- Socket Bound ->" );

	// Listen for a connection
	iStatus = listen( g_skListenSocket, 32 );

	if( iStatus == SOCKET_ERROR ) {
		vShowText( "** ERROR ** Could Not Listen" );
		// Close the socket
		closesocket(g_skListenSocket);
		return;
	}

	vShowText( "<- Socket Listening ->" );
	
	g_skClientSocket = accept( g_skListenSocket, (struct sockaddr*)&saClientAddress, &iClientSize );
	
	if( g_skClientSocket == INVALID_SOCKET ) {
		vShowText( "** ERROR ** Could Not Accept Client" );
		// Close the socket
		closesocket(g_skListenSocket);
		return;
	}

	// Turn off buttons
	DestroyWindow( hBU_Connect );
	DestroyWindow( hBU_Host );

	vShowText( "<- Client Connected ->" );

	// Flag as connected
	g_bConnected = 1;

	// Flag that it is the other player's turn
	// to end the turn
	g_bMyTurn = 0;

	// Wait for client's first turn
	vTurnDone();
}

//
// Function to connect to the host game server.  Once connected, the
// client has the option to end the turn.
//
void vConnect( void )
{
	sockaddr_in saServerAddress;
	int			iPort = 6001,iStatus;
	LPHOSTENT	lpHost;
	char		szHost[128];

	// ** FOR YOU TO DO **
	// Pull the server IP and port number from the
	// windows controls.

	// Set global var
	g_bIsServer = 0;

	// Init the host value, change this IP to whatever valid IP you wish
	sprintf( szHost,"192.168.0.2" );

	// Initialize the socket handle
	g_skClientSocket = INVALID_SOCKET;

	// Create the socket
	g_skClientSocket = socket( AF_INET, SOCK_STREAM, 0 );

	// Check if there was an error
	if( g_skClientSocket == INVALID_SOCKET ) {
		vShowText( "** ERROR ** Could Not Create Socket" );
		return;
	}

	vShowText( "<- Socket Created ->" );

	// Initialize the server address data structure
	memset(&saServerAddress,0,sizeof(sockaddr_in));
	// Set this by default
	saServerAddress.sin_family = AF_INET;
	// Load the IP Address
	saServerAddress.sin_addr.s_addr = inet_addr(szHost);

	// If the host specified is not an IP Address we must look up the value
	if( saServerAddress.sin_addr.s_addr == INADDR_NONE )
	{
		vShowText( "<- Looking Up Host ID ->" );
		// Get the host name
		lpHost = gethostbyname(szHost);
		// Check if we got something back
		if (lpHost != NULL) {
			// Load the server address with the host information
			saServerAddress.sin_addr.s_addr = ((LPIN_ADDR)lpHost->h_addr)->s_addr;
		}
		else {
			vShowText( "** ERROR ** Could Not locate host" );
			return;
		}
	}

	// Set the Server Port
	saServerAddress.sin_port = htons(iPort);

	// Attempt to connect to the server
	iStatus = connect( g_skClientSocket, (struct sockaddr*)&saServerAddress,sizeof(sockaddr));

	// Check if there was an error
	if( iStatus == SOCKET_ERROR ) {
		vShowText( "** ERROR ** Could Not Connect To Server" );
		return;
	}

	// Turn off buttons
	DestroyWindow( hBU_Connect );
	DestroyWindow( hBU_Host );

	vShowText( "<- Connected To Server ->" );

	// Flag as connected
	g_bConnected = 1;
	// Flag that it is my turn to end the turn
	g_bMyTurn = 1;

	// Turn on the Turn Done window
	hBU_TurnDone = CreateWindow(
		"BUTTON",
		"Turn Done",
		WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
		5,
		280,
		100,
		28,
		g_hWnd,(HMENU)IDC_hBU_TurnDone,g_hInst,NULL);

	vShowText( ":Server waiting, make your turn" );
}

//
// Function to close any outstanding sockets
//
void vShutdownSockets( void )
{
	// Check if connected
	if( g_bConnected ) {
		// Check if server
		if( g_bIsServer ) {
			// Close listen socket
			closesocket( g_skListenSocket );
		}
		// Close client socket
		closesocket( g_skClientSocket );
	}

	// Clean up WinSock
	WSACleanup();
}

//
// Function to tell the other player the turn is complete.
//
void vTurnDone( void )
{
	// If connected, check to send or receive turn message
	if( g_bConnected ) {

		// My turn, send the message
		if( g_bMyTurn ) {

			// Disable turn button
			DestroyWindow( hBU_TurnDone );

			// Send turn over message
			vSendTurnMessage();

			if( g_bIsServer ) {
				vShowText( ":Waiting for client's turn" );
			}
			else {
				vShowText( ":Waiting for servers's turn" );
			}
			// Wait for receive message
			vReceiveTurnMessage();

			if( g_bIsServer ) {
				vShowText( ":Client waiting, make your turn" );
			}
			else {
				vShowText( ":Server waiting, make your turn" );
			}
		}
		else {
			if( g_bIsServer ) {
				vShowText( ":Waiting for client's turn" );
			}
			else {
				vShowText( ":Waiting for servers's turn" );
			}
			// Wait for receive message
			vReceiveTurnMessage();
			
			if( g_bIsServer ) {
				vShowText( ":Client waiting, make your turn" );
			}
			else {
				vShowText( ":Server waiting, make your turn" );
			}
		}
	}
}

//
// Sends the actual turn-end packet.
//
void vSendTurnMessage( void )
{
	char	szTurnPacket[ 32 ];
	int		iBytes = 0;

	// Create a "dummy" packet
	sprintf( szTurnPacket, "turnpacket" );
	// Send the packet
	iBytes = send( g_skClientSocket, szTurnPacket, 32, 0 );
	if( iBytes != SOCKET_ERROR ) {
	}
	else {
		vShowText( "** ERROR ** Sending" );
		return;
	}

	// Set to receive mode now
	g_bMyTurn = 0;
}

//
// Waits for a turn-end packet.
//
void vReceiveTurnMessage( void )
{
	char	szTurnPacket[ 32 ];
	int		iBytes = 0;

	iBytes = recv( g_skClientSocket, szTurnPacket, 32, 0 );
	// Check return code
	if( iBytes != SOCKET_ERROR ) {
	}
	else {
		vShowText( "** ERROR ** Receiving" );
		return;
	}

	// Set to send mode now
	g_bMyTurn = 1;

	// Turn on the Turn Done button
	hBU_TurnDone = CreateWindow(
		"BUTTON",
		"Turn Done",
		WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
		5,
		280,
		100,
		28,
		g_hWnd,(HMENU)IDC_hBU_TurnDone,g_hInst,NULL);
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美videos大乳护士334| 青椒成人免费视频| 91在线高清观看| 欧美国产一区二区| 91视频精品在这里| 亚洲一区二区三区自拍| 欧美日韩免费视频| 激情综合网最新| 国产精品天干天干在观线| 92精品国产成人观看免费| 夜夜爽夜夜爽精品视频| 91精品麻豆日日躁夜夜躁| 国内外成人在线| 国产精品黄色在线观看| 在线观看免费亚洲| 美女任你摸久久| 亚洲国产经典视频| 欧美三区免费完整视频在线观看| 日本不卡不码高清免费观看| 久久天天做天天爱综合色| av激情成人网| 麻豆高清免费国产一区| 日本一区二区高清| 欧美精品精品一区| 成人一区二区三区| 天使萌一区二区三区免费观看| 久久久久久夜精品精品免费| 成人激情免费网站| 日韩二区三区四区| 亚洲欧洲精品一区二区三区不卡| 7777精品伊人久久久大香线蕉完整版 | 91丨porny丨首页| 亚瑟在线精品视频| 国产精品毛片a∨一区二区三区| 91女厕偷拍女厕偷拍高清| 午夜视频久久久久久| 国产视频一区不卡| 欧美精品粉嫩高潮一区二区| 国产99久久久精品| 日韩高清不卡一区| 一区二区三区四区视频精品免费| 精品国产亚洲在线| 欧美日韩国产一级片| 99久久国产免费看| 国精产品一区一区三区mba桃花| 亚洲综合免费观看高清在线观看| 国产欧美一区在线| 911精品国产一区二区在线| 99久久综合精品| 精品一区二区在线视频| 婷婷六月综合网| 亚洲最新在线观看| 中文字幕av资源一区| 亚洲精品一区二区三区精华液| 欧美三级欧美一级| 97国产一区二区| 国产不卡免费视频| 精品亚洲国内自在自线福利| 婷婷中文字幕综合| 一区二区欧美国产| 成人欧美一区二区三区白人| 久久久久久久综合日本| 欧美变态凌虐bdsm| 宅男噜噜噜66一区二区66| 色噜噜偷拍精品综合在线| 不卡av免费在线观看| 成人一级片网址| 国产成人综合自拍| 国产精品亚洲第一| 久久福利视频一区二区| 婷婷开心久久网| 天天综合色天天| 婷婷国产v国产偷v亚洲高清| 亚洲综合久久av| 亚洲高清免费在线| 天天免费综合色| 视频一区二区不卡| 久久精品国内一区二区三区| 免费人成在线不卡| 久久97超碰国产精品超碰| 久久成人久久爱| 国产成人精品一区二区三区四区 | 日韩视频一区二区三区| 欧美一二三四在线| 欧美成人在线直播| 久久久电影一区二区三区| 国产欧美日韩不卡| 国产精品免费看片| 亚洲免费大片在线观看| 亚洲资源中文字幕| 日精品一区二区三区| 精品一区二区在线观看| 国产馆精品极品| 成人ar影院免费观看视频| 色呦呦一区二区三区| 欧美日韩国产中文| xvideos.蜜桃一区二区| 国产精品久久久一区麻豆最新章节| 国产精品免费aⅴ片在线观看| 18欧美乱大交hd1984| 亚洲一区二区三区免费视频| 日韩不卡免费视频| 国产不卡视频一区| 在线观看www91| 精品久久国产老人久久综合| 国产精品国产三级国产专播品爱网 | 日本强好片久久久久久aaa| 久久97超碰国产精品超碰| 成人av先锋影音| 欧美日本韩国一区| 国产夜色精品一区二区av| 日韩毛片高清在线播放| 石原莉奈在线亚洲二区| 国产馆精品极品| 欧美日精品一区视频| 欧美精品一区二区不卡| 亚洲毛片av在线| 美女视频一区二区三区| 99久久精品一区| 日韩片之四级片| 日韩一区有码在线| 麻豆91免费看| 91免费看`日韩一区二区| 制服丝袜国产精品| 欧美激情一区二区三区蜜桃视频| 亚洲一级片在线观看| 福利电影一区二区三区| 欧美精三区欧美精三区| 中文字幕在线观看一区二区| 日本在线不卡视频| 91色视频在线| 久久一区二区三区四区| 日韩电影免费一区| 91亚洲精品乱码久久久久久蜜桃| 日韩一级黄色大片| 一区二区在线观看视频| 国产精品91一区二区| 91精品在线麻豆| 一区二区三区自拍| 岛国一区二区三区| 欧美mv日韩mv国产网站| 午夜视黄欧洲亚洲| 色综合久久88色综合天天6| 国产清纯白嫩初高生在线观看91| 蜜臀av一区二区三区| 在线观看免费成人| 亚洲视频中文字幕| 成人av第一页| 国产欧美日韩一区二区三区在线观看| 日本vs亚洲vs韩国一区三区| 欧美性受极品xxxx喷水| 亚洲精品视频免费观看| 成人av电影在线播放| 久久免费电影网| 国模套图日韩精品一区二区| 91麻豆精品国产| 日韩影院精彩在线| 欧美日韩一级大片网址| 亚洲永久精品大片| 色8久久精品久久久久久蜜| 亚洲视频综合在线| av在线不卡观看免费观看| 国产精品欧美综合在线| jlzzjlzz欧美大全| 综合激情成人伊人| 色香蕉久久蜜桃| 夜夜嗨av一区二区三区网页 | 日本中文字幕一区| 3d动漫精品啪啪一区二区竹菊| 午夜精品123| 91麻豆精品国产91久久久更新时间 | 男男gaygay亚洲| 日韩精品一区二区三区四区| 美国三级日本三级久久99| 日韩无一区二区| 国内外成人在线| 国产精品美女久久久久av爽李琼 | 欧美一区二区成人| 美国毛片一区二区| 国产日产亚洲精品系列| av一本久道久久综合久久鬼色| 亚洲国产精品成人久久综合一区| 成人免费高清视频| 一区二区三区免费网站| 欧美日韩精品一区二区天天拍小说| 亚洲成人综合在线| 精品日韩在线观看| 国产成人亚洲综合a∨婷婷图片| 国产精品视频观看| 欧美性大战xxxxx久久久| 蓝色福利精品导航| 国产精品久久国产精麻豆99网站| 欧洲精品中文字幕| 久久成人综合网| 国产精品高潮呻吟久久| 99视频在线精品| 日韩精品亚洲一区二区三区免费| 精品久久久久久久久久久久久久久久久| 国产高清成人在线| 亚洲国产精品自拍|