Restructure repository to include all source folders

Move git root from Client/ to src/ to track all source code:
- Client: Game client source (moved to Client/Client/)
- Server: Game server source
- GameTools: Development tools
- CryptoSource: Encryption utilities
- database: Database scripts
- Script: Game scripts
- rylCoder_16.02.2008_src: Legacy coder tools
- GMFont, Game: Additional resources

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-11-29 20:17:20 +09:00
parent 5d3cd64a25
commit dd97ddec92
11602 changed files with 1446576 additions and 0 deletions

View File

@@ -0,0 +1,471 @@
#include "stdafx.h"
#include "NetString.h"
CNetString::CNetString(void)
{
m_iIndex = 0;
m_hWnd = NULL; // <20>θ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڵ<EFBFBD>
m_hSocket = NULL; // Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
m_nPort = 0; // <20><>Ʈ
ZeroMemory(m_strIPAddr, sizeof(char)*20); // Server IP<49><50><EFBFBD><EFBFBD>
m_bConnect = FALSE; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>÷<EFBFBD><C3B7><EFBFBD>
m_bClose = FALSE;
m_RecvIO.NewIOBuf(0); // 0<><30><EFBFBD><EFBFBD> <20>ϸ<EFBFBD> <20><EFBFBD><E2BABB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DefaultPacketSize * 1024
m_hEvent = NULL; // <20><>Ʈ<EFBFBD><C6AE>ũ <20>̺<EFBFBD>Ʈ <20>ڵ鷯
ZeroMemory(m_PacketBuffer, sizeof(char)*MAX_PACKETSIZE); // Server IP<49><50><EFBFBD><EFBFBD>
WinSockInit();
}
CNetString::~CNetString(void)
{
OnClose();
Stop(); // <20><><EFBFBD><EFBFBD> <20>Լ<EFBFBD> ȣ<><C8A3>
m_RecvIO.DeleteIOBuf();
WSACleanup();
}
BOOL CNetString::WinSockInit()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
WSACleanup();
// Tell the user that we could not find a usable
// WinSock DLL.
return FALSE;
}
if ( LOBYTE( wsaData.wVersion ) != 2 ||
HIBYTE( wsaData.wVersion ) != 2 ) {
// Tell the user that we could not find a usable //
// WinSock DLL. //
WSACleanup( );
return FALSE;
}
return TRUE;
}
//////////////////////////////////////////////////////////////////
// [1]DESCRIPTION : Ŭ<><C5AC><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ //
// [2]PARAMETER : strIPAddr - <20><><EFBFBD><EFBFBD>IP<49>ּ<EFBFBD>, nPort - <20><>Ʈ<EFBFBD><C6AE>ȣ, //
// hWnd - <20>θ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڵ<EFBFBD> //
// [3]RETURN : <09><><EFBFBD><EFBFBD> - TRUE, <20><><EFBFBD><EFBFBD> - FALSE //
// [4]DATE : 2000<30><30> 9<><39> 11<31><31> //
//////////////////////////////////////////////////////////////////
BOOL CNetString::Init( HWND hWnd, int iIndex, char* szIP, int nPort )
{
m_iIndex = iIndex;
m_nPort = nPort; // <20><>Ʈ <20><>ȣ
unsigned long dwThreadId = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
// ip <20><><EFBFBD><EFBFBD><E5B7B9>
strcpy(m_strIPAddr,szIP);
m_hWnd = hWnd; // <20>θ<EFBFBD> <20>ڵ<EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ų<EFBFBD><C5B2>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.. <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD>Ѵٸ<D1B4>
// Netword Event <20><><EFBFBD><EFBFBD> FW_CLOSE<53><45> <20>߻<EFBFBD><DFBB><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Close<73>ȴ<EFBFBD>.
if(!Connect())
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
Sleep(100); // Sleep...
OnClose();
return FALSE;
}
m_bClose = FALSE;
m_hEventThread =
(HANDLE)CreateThread(NULL, // Security
0, // Stack size - use default
EventThreadProc, // Thread fn entry point
(void*) this,
0, // Init flag
&dwThreadId); // Thread address
return TRUE;
}
//////////////////////////////////////////////////////////////////
// [1]DESCRIPTION : Main Thread, <20><>Ʈ<EFBFBD><C6AE>ũ <20>̺<EFBFBD>Ʈ ó<><C3B3> //
// [2]PARAMETER : void //
// [3]RETURN : void //
// [4]DATE : 2000<30><30> 9<><39> 10<31><30> //
//////////////////////////////////////////////////////////////////
DWORD WINAPI CNetString::EventThreadProc(LPVOID lParam)
{
// Ŭ<><C5AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
CNetString* pThis = reinterpret_cast<CNetString*>(lParam);
WSANETWORKEVENTS events; // <20><>Ʈ<EFBFBD><C6AE>ũ <20>̺<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
BOOL bThreadRun = TRUE; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
while(bThreadRun)
{
if(pThis->m_bClose)
{
bThreadRun = FALSE;
break;
}
DWORD dwRet;
dwRet = WSAWaitForMultipleEvents(1,
&pThis->m_hEvent,
FALSE,
INFINITE,
FALSE);
if(!pThis->m_hSocket)
{
// <20><><EFBFBD><EFBFBD>
bThreadRun = FALSE;
break;
}
// Figure out what happened
int nRet = WSAEnumNetworkEvents(pThis->m_hSocket,
pThis->m_hEvent,
&events);
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
if (nRet == SOCKET_ERROR)
{
bThreadRun = FALSE;
break;
}
///////////////////
// Handle events //
bThreadRun = pThis->NetworkEventHanlder(events.lNetworkEvents);
}
// <20≯<EFBFBD><CCB8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD> <20>Ǹ<EFBFBD> Server<65><72> <20><><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>!!! <<3C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ<EFBFBD><C8AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ֱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʴ´<CAB4>.
// pThis->CloseAll();
return 0;
}
void CNetString::Disconnect()
{
// <20>̰<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Close<73><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CloseAll() ȣ<><C8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʰ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
OnClose();
Stop(); // <20><><EFBFBD><EFBFBD> <20>Լ<EFBFBD> ȣ<><C8A3>
}
void CNetString::Stop()
{
if (m_hSocket)
{
struct linger li = {0, 0}; // Default: SO_DONTLINGER
li.l_onoff = 1; // SO_LINGER, timeout = 0
shutdown(m_hSocket, SD_BOTH ); // <20><><EFBFBD><EFBFBD>? <20>̰<EFBFBD> <20><><EFBFBD><EFBFBD>? ^^;; <20>㿡 ã<>ƺ<EFBFBD><C6BA><EFBFBD>
// 2001<30><31> 9<><39> 6<><36>
// Ŭ<><C5AC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ť<><C5A5> <20><><EFBFBD><EFBFBD>Ÿ<EFBFBD><C5B8> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20>ɼ<EFBFBD>
setsockopt(m_hSocket, SOL_SOCKET, SO_LINGER, (CHAR *)&li, sizeof(li));
closesocket(m_hSocket); // <20><><EFBFBD><EFBFBD> <20>ݱ<EFBFBD>
m_hSocket = NULL;
}
if(m_hEvent) WSACloseEvent(m_hEvent);
m_hEvent = NULL;
}
void CNetString::CloseAll()
{
if(m_bConnect)
{
OnClose();
Stop(); // <20><><EFBFBD><EFBFBD> <20>Լ<EFBFBD> ȣ<><C8A3>
}
}
BOOL CNetString::OnClose()
{
m_bClose = TRUE;
m_bConnect = FALSE; // Connect <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
OnSocketEvent(WM_SOCK_CLOSE, 0);
return FALSE;
}
//////////////////////////////////////////////////////////////////
// [1]DESCRIPTION : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Լ<EFBFBD> //
// [2]PARAMETER : void //
// [3]RETURN : <09><><EFBFBD><EFBFBD> - TRUE, <20><><EFBFBD><EFBFBD> - FALSE //
// [4]DATE : 2000<30><30> 9<><39> 11<31><31> //
//////////////////////////////////////////////////////////////////
BOOL CNetString::Connect()
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̶<EFBFBD><CCB6><EFBFBD>
if(m_bConnect) return TRUE;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ִٸ<D6B4>
Stop();
m_RecvIO.InitIOBuf();
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_hSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>˻<EFBFBD>
if (m_hSocket == INVALID_SOCKET)
{
OnSocketEvent(WM_CONNECT, FALSE);
return FALSE;
}
// <20><>Ʈ<EFBFBD><C6AE>ũ <20>̺<EFBFBD>Ʈ <20>ڵ<EFBFBD> <20><><EFBFBD><EFBFBD>
m_hEvent = WSACreateEvent();
if (m_hEvent == WSA_INVALID_EVENT)
{
Stop();
return FALSE;
}
// Request async notification
int nRet = WSAEventSelect(m_hSocket,
m_hEvent,
FD_CLOSE | FD_CONNECT); // <20><>ȣ<EFBFBD><C8A3> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD> <20>ް<EFBFBD> <20>Ѵ<EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (nRet == SOCKET_ERROR)
{
Stop();
return FALSE;
}
// <20>񵿱<EFBFBD> <20><><EFBFBD><EFBFBD>
unsigned long ul = 1;
nRet = ioctlsocket(m_hSocket, FIONBIO, (unsigned long*)&ul);
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>˻<EFBFBD>
if (m_hSocket == SOCKET_ERROR)
{
OnSocketEvent(WM_CONNECT, FALSE);
return FALSE;
}
/////////////////////////////////
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ȭ<EFBFBD><C8AD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
int zero = 0;
int err = 0;
// Send Buffer<65><72> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
if( (err = setsockopt( m_hSocket, SOL_SOCKET, SO_SNDBUF, (const char*)&zero, sizeof(zero))) == SOCKET_ERROR)
{
closesocket(m_hSocket);
m_hSocket = NULL;
return FALSE;
}
// Receive Buffer<65><72> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
if((err = setsockopt( m_hSocket, SOL_SOCKET, SO_RCVBUF, (const char*)&zero, sizeof(zero) )) == SOCKET_ERROR)
{
closesocket(m_hSocket);
m_hSocket = NULL;
return FALSE;
}
SOCKADDR_IN saServer;
memset(&saServer,0,sizeof(saServer));
saServer.sin_family = AF_INET;
saServer.sin_addr.s_addr = inet_addr(m_strIPAddr);
saServer.sin_port = htons(m_nPort);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Connect
nRet = connect(m_hSocket,(sockaddr*)&saServer, sizeof(saServer));
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̰ų<CCB0> <20><><EFBFBD><EFBFBD>ŷ<EFBFBD><C5B7> <20>Ǿ<EFBFBD><C7BE>ٸ<EFBFBD>
if (nRet == SOCKET_ERROR && WSAGetLastError() != WSAEWOULDBLOCK)
{
Stop();
return FALSE;
}
/*
<09>̷<EFBFBD><CCB7><EFBFBD> Connect<63><74> <20>ϸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> AccetpEx<45><78> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD> ClientSceesion<6F><6E>
Recv<63><76><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD> <20><><EFBFBD><EFBFBD><EEB0A3>.
<09><><EFBFBD><EFBFBD> <20>̺<EFBFBD>Ʈ<EFBFBD><C6AE> Connect<63><74> <20><><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD> FD_CONNECT<43><54> <20>߻<EFBFBD><DFBB><EFBFBD>Ų<EFBFBD><C5B2>.
*/
return TRUE;
}
//////////////////////////////////////////////////////////////////
// [1]DESCRIPTION : <20><>Ʈ<EFBFBD><C6AE>ũ <20>޼<EFBFBD><DEBC><EFBFBD><EFBFBD><EFBFBD> <20>ڵ鸵 <20>Ͽ<EFBFBD> <20>б<EFBFBD> //
// [2]PARAMETER : lEvent - <20>̺<EFBFBD>Ʈ //
// [3]RETURN : void //
// [4]DATE : 2000<30><30> 9<><39> 14<31><34> //
//////////////////////////////////////////////////////////////////
BOOL CNetString::NetworkEventHanlder(LONG lEvent)
{
BOOL bFlag = TRUE;
if(lEvent & FD_CLOSE)
{
bFlag = FALSE;
}
if(lEvent & FD_CONNECT)
{
bFlag = OnConnect();
}
return bFlag;
}
void CNetString::Update()
{
if(!IsConnect())
return;
OnSendPacketData();
OnReadPacketData();
while(GetQueCnt() != 0)
{
int iCnt = GetPacket(m_PacketBuffer);
ProcessPacket(m_PacketBuffer, iCnt);
// printf(m_PacketBuffer);
PopPacket();
}
}
void CNetString::ProcessPacket(char* Packet, int PacketLen)
{
if(m_event)
m_event->EventPacket(m_iIndex, Packet);
}
void CNetString::SendPost(char* Packet)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Send <20>ϱ<EFBFBD>..
m_SendQue.push_back(Packet);
}
void CNetString::OnSendPacketData()
{
if(m_SendQue.empty())
return;
//////////////////////////////////////////////////////////////////////////////
// Send
int rc = 0;
int idx = 0,size = 0;
char send_buf[MAX_PACKETSIZE];
strcpy(send_buf, m_SendQue.begin()->c_str());
size = (int)strlen(send_buf);
while(size > 0)
{
// 10004 : WSACancelBlockingCall<6C><6C> ȣ<><C8A3><EFBFBD>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>۾<EFBFBD><DBBE><EFBFBD> <20>ߴܵǾ<DCB5><C7BE><EFBFBD><EFBFBD>ϴ<EFBFBD>.
// 10058 : <20>ش<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD>Ƿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ų<EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.
// 10038 : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ҷ<EFBFBD><D2B7><EFBFBD> <20>Ҷ<EFBFBD> <20><><EFBFBD><EFBFBD>.
if((rc = send(m_hSocket, &send_buf[idx], size, 0)) == SOCKET_ERROR)
{
// <20><><EFBFBD><EFBFBD>ŷ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (GetLastError() != WSAEWOULDBLOCK) // <20><><EFBFBD><EFBFBD>ŷ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴ϶<C6B4><CFB6><EFBFBD>
{
break;
}
}
else
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ٸ<EFBFBD>
size -= rc;
idx += rc;
}
m_SendQue.pop_front();
}
}
void CNetString::OnReadPacketData()
{
//////////////////////////////////////////////////////////////////////////////
// Recv
int Ret = recv(m_hSocket, m_PacketBuffer, MAX_PACKETSIZE, 0); // <20><><EFBFBD><EFBFBD>Ÿ Receive
if(Ret == 0) // Graceful close
{
CloseAll();
return;
}
else if (Ret == SOCKET_ERROR && WSAGetLastError() != WSAEWOULDBLOCK ) // <20><><EFBFBD><EFBFBD>ŷ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴ϶<C6B4><CFB6><EFBFBD>
{
m_bConnect = FALSE;
Stop(); // <20><><EFBFBD>α׷<CEB1> <20><><EFBFBD><EFBFBD>
return;
}
if(Ret > 0)
{
if(m_RecvIO.Append(m_PacketBuffer, Ret) == -1)
{
;
}
}
// <20><><EFBFBD><EFBFBD> <20><>Ŷ<EFBFBD><C5B6> IOBuffer<65><72> <20>־<EFBFBD> ó<><C3B3><EFBFBD>Ѵ<EFBFBD>.
int iLen = m_RecvIO.GetPacket(m_PacketBuffer);
if(iLen > 0)
{
// <20><><EFBFBD><20><><EFBFBD><EFBFBD>Ŷ ó<><C3B3> <20><>ƾ ȣ<><C8A3>
m_RecvQue.push_back(m_PacketBuffer);
// Message Type <20>϶<EFBFBD> <20>̰ɷ<CCB0> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
// <20><><EFBFBD><EFBFBD> Update <20>̺<EFBFBD>Ʈ ȣ<><C8A3><EFBFBD≯<EFBFBD> <20><> <20><>ƾ<EFBFBD><C6BE> <20>ּ<EFBFBD>ó<EFBFBD><C3B3> <20><><EFBFBD>ش<EFBFBD>.
OnSocketEvent(WM_RECV_MSG, iLen);
}
}
//////////////////////////////////////////////////////////////////
// [1]DESCRIPTION : <20>̺<EFBFBD>Ʈ ó<><C3B3> (On Connect) //
// [2]PARAMETER : void //
// [3]RETURN : false <20><>ȯ //
// [4]DATE : 2000<30><30> 9<><39> 11<31><31> //
//////////////////////////////////////////////////////////////////
BOOL CNetString::OnConnect()
{
m_bConnect = TRUE; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ON
OnSocketEvent(WM_CONNECT, m_bConnect);
return m_bConnect;
}
void CNetString::SetParent(HWND hWnd)
{
m_hWnd = hWnd;
}
void CNetString::GetLocalIP(char* LocalIP)
{
char name[256];
char* TempIp;
PHOSTENT hostinfo;
WinSockInit();
if( gethostname ( name, sizeof(name)) == 0)
{
if((hostinfo = gethostbyname(name)) != NULL)
{
TempIp = inet_ntoa (*(struct in_addr *)*hostinfo->h_addr_list);
strcpy(LocalIP, TempIp);
}
}
}