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

📄 network.cpp

📁 大家好!这是一个网络游戏源码
💻 CPP
字号:
#include "runner_net.h"


int LUA_TAG_SERVER;
int LUA_TAG_CLIENT;

void IpAddrToStr(char *param_ip_str , int addr)
{
   char ip_str[STR_IP_LEN];
   char str0[3];
   char str1[3];
   char str2[3];
   char str3[3];
#if(_WINDOWS||_WIN32||WIN32)
    itoa((addr>>24)&0xFF ,str3  , 10);   
	itoa((addr>>16)&0xFF ,str2  , 10);
	itoa((addr>>8)&0xFF  ,str1  , 10);
	itoa( addr&0xFF      ,str0  , 10);
#else
   	gcvt((addr>>24)&0xFF,3 ,str3); 
	gcvt((addr>>16)&0xFF,3 ,str2);
	gcvt((addr>>8)&0xFF ,3 ,str1);
	gcvt( addr&0xFF     ,3 ,str0);
#endif
   
   strcpy(ip_str,str0);
   strcat(ip_str,".");
   strcat(ip_str,str1);
   strcat(ip_str,".");
   strcat(ip_str,str2);
   strcat(ip_str,".");
   strcat(ip_str,str3);
   strcpy(param_ip_str , ip_str);
}





/*
  
	初始化网络

*/

int lua_CreateServer(lua_State *L)
{
	if( (lua_gettop(L)==2) && lua_isnumber(L, 1) && lua_isnumber(L , 2) )
	{
		int iPort    	     = (int)lua_tonumber(L , 1);
		int iMaxClientAmount = (int)lua_tonumber(L , 2);
		if(iPort < 0 || iMaxClientAmount <= 0)
		{
		    Out("ERR :%s\n" , "Invalid Port or MaxClientAmount");
			return 0;
		}
		
		CNetServer *pServer ; GetMemoryI(pServer , CNetServer);
		
		pServer->iMaxClient	= iMaxClientAmount;
		pServer->iPort		= iPort;
		
		pServer->SocketSet	= SDLNet_AllocSocketSet(iMaxClientAmount + 1);
		
		if(pServer->SocketSet==NULL) 
		{
			Out("ERR : Couldn't create socket set: %s\n" , SDLNet_GetError());
			FreeMemory(pServer);
			return 0;
		}
		
		SDLNet_ResolveHost(&pServer->IpAddr , NULL , iPort);
		
		pServer->tcpSock = SDLNet_TCP_Open(&pServer->IpAddr);
		if(pServer->tcpSock==NULL) 
		{
			Out("ERR : Couldn't create server socket: %s\n",SDLNet_GetError());
			FreeMemory(pServer);
			return 0;
		}
		
		SDLNet_TCP_AddSocket(pServer->SocketSet, pServer->tcpSock);
	
		IPaddress tmpAddr;
		gethostname(pServer->strMachineName , STR_ID_LEN);
		SDLNet_ResolveHost(&tmpAddr , pServer->strMachineName , 0);
		IpAddrToStr(pServer->strIP , tmpAddr.host);
	
		printf("Server Created!\n");
		printf("  name : %s\n" , pServer->strMachineName);
		printf("  ip   : %s\n" , pServer->strIP);
		printf("  port : %d\n" , pServer->iPort);
		printf("-------------------------------------\n");
		lua_pushusertag(L , pServer , LUA_TAG_SERVER);
		return 1;
	}
	return 0;
}


// 初始化网络与LUA的接口(tag & functions)
VOID LUAInterface_InitNetwork()
{
	LUA_TAG_SERVER = lua_newtag(L_S); 
	LUA_TAG_CLIENT = lua_newtag(L_S); 
	
    lua_register(L_S , "CreateServer" , lua_CreateServer);
}

VOID InitNetwork()
{
	if(SDLNet_Init() <0) 
	{
         Out("ERR : Couldn't initialize sdl net: %s\n",SDL_GetError());
         return;
	}
	LUAInterface_InitNetwork();
}

⌨️ 快捷键说明

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