⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 helper.cpp

📁 《嵌入式Linux应用开发详解》中的源代码
💻 CPP
字号:
#include "stdafx.h"
#include <process.h>
#include "common.h"
///////////////////////////////////////////////////////////////////////////////////////////////
extern DWORD							g_dwPlayerCommThreadId ;
///////////////////////////////////////////////////////////////////////////////////////////////
char							g_szDBServerIP[16];
char							g_szServerName[128];// = "NTGATEWAY";
///////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////
void Init()
{
	InitWinSock();
	memset(g_szServerName,0,128);
	//gethostname(g_szServerName,128);
	////////////////////////////////////////////////////////////
	//读IP
	HKEY hkey;
	if(RegOpenKeyEx(
		HKEY_LOCAL_MACHINE,
		"SOFTWARE\\GameKing",
		0L,
		KEY_ALL_ACCESS,
		&hkey)==ERROR_SUCCESS)
	{
		DWORD dwdatatype,dwlen;
		dwlen=sizeof(g_szDBServerIP);
		if(RegQueryValueEx(
			hkey,
			"DBServerIP",
			NULL,
			&dwdatatype,
			(LPBYTE)g_szDBServerIP,
			&dwlen)!=ERROR_SUCCESS)
		{
			//error
		}
	}
	else
	{
		//error
	}
	///////////////////////////////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////
	//读HOST NAME
	//HKEY hkey;
	if(RegOpenKeyEx(
		HKEY_LOCAL_MACHINE,
		"SOFTWARE\\GameKing",
		0L,
		KEY_ALL_ACCESS,
		&hkey)==ERROR_SUCCESS)
	{
		DWORD dwdatatype,dwlen;
		dwlen=sizeof(g_szServerName);
		if(RegQueryValueEx(
			hkey,
			"DBServerName",
			NULL,
			&dwdatatype,
			(LPBYTE)g_szServerName,
			&dwlen)!=ERROR_SUCCESS)
		{
			//error
		}
	}
	else
	{
		//error
	}

	///////////////////////////////////////////////////////////////////////////////////////////
	//InitSimpleMAPI();
	//SendMail();
	//从注册表中读出g_szSMTPServerIP
}
void ExitInstance()
{
	PostThreadMessage(g_dwPlayerCommThreadId,UM_CLOSE,0,0);


	WSACleanup();
}
void InitCriticalSections()
{
}

//Common Helpers
void InitWinSock()
{
	WSADATA wsaData;
	WSAStartup(WINSOCK_VERSION,&wsaData);
}

///////////////////////////////////////////////////////////////////////////////////////////////
void GetPeerIPBySocket(SOCKET sock,char *pszIP)
{
	struct sockaddr  addrname;    
	int namelen = sizeof(struct sockaddr);
	//getsockname(sock,&addrname,&namelen);//获取本机IP,
	getpeername(sock,&addrname,&namelen);//获取对端IP
	struct sockaddr_in addr;
	memcpy((char *)&addr,(char *)&addrname,sizeof(sockaddr));
	strcpy(pszIP,inet_ntoa((in_addr)addr.sin_addr));
}
///////////////////////////////////////////////////////////////////////////////////////////////
int RecvFixedBytes(SOCKET s,char *buf,int nBytesWantToRecv)
{
	int cnt;
	int rcnt;
	for(cnt= 0; cnt < nBytesWantToRecv; cnt+= rcnt) 
	{
		rcnt= recv(s,buf+cnt,(unsigned) (nBytesWantToRecv-cnt),0);
		if( rcnt <= 0 ) 
			return SOCKET_ERROR;
	}
	return cnt;
}
int AsyncReadLine(SOCKET hSocket,char *buf, int count)
{
	char *ptr = buf;
	int nRead = 0;
	char c;

	while(nRead < count) 
	{
		int nBytesRecv = recv(hSocket,&c,1,0);

		if ( nBytesRecv == 1 ) 
		{
			nRead ++;
			*ptr++ = c;
			if ( c == '\n' ) 
			{
				break;
			}
		} 
	}
	*ptr = '\0';
	return nRead;
}
///////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////
//线程代码
///////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////
void ListenThread(LPVOID hAcceptSocket )
{	
	TRACE("----------------------------------------------------------\n");
	TRACE("Listen/AcceptThread (ID=0x%x) started !\n",GetCurrentThreadId());
	TRACE("----------------------------------------------------------\n");

	SOCKET hAcceptGameSocket = (SOCKET)hAcceptSocket;
	for (;;) 
	{
		SOCKET	hPlayerCommSocket;
		struct sockaddr RemoteAddr;
		int AddrLen = sizeof(struct sockaddr);
		if ((hPlayerCommSocket = accept (hAcceptGameSocket, (struct sockaddr FAR *)&RemoteAddr,
											(int FAR* ) &AddrLen))!=INVALID_SOCKET)
		{
			TRACE("Accept new client connection on socket: %d\n",hPlayerCommSocket);
			_beginthread(PlayerCommThread,0,(LPVOID)hPlayerCommSocket);
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -