Итак, я работаю над программным обеспечением, которое подключается к серверу, который я сделал, который находится на моем домашнем компьютере. У меня был кузен, который работает в Силиконовой долине, и он не может понять, почему это не работает. Я использую заголовок winsockx.h, потому что программное обеспечение будет работать на консоли Xbox 360, но заголовок разработан так же, как и стандартные заголовки winsock.
У меня есть переадресованный порт 9001 и настройка для моего домашнего компьютера, поэтому установка не должна быть проблемой. Мне также сказали, что мой сервер должен функционировать должным образом, но у меня должен быть основной прослушиватель в отдельном потоке, чтобы можно было обрабатывать несколько клиентов одновременно.
К вашему сведению: когда я вызываю DbgPrint, он отправляет данные на монитор отладки xbWatson, а также обнаруживает ошибки и отображает их на экране.
Вот 2 основных скриншота, посвященных проблеме.
Debug Moniter: http://i.gyazo.com/b4c5e90b427113992fa02cdb3c73e7e2.png &
Где код ломается: http://i.gyazo.com/5942967dd8456f4f194107bfce1d2b4c.png
VOID Connect()
{
DbgPrint("-- Creating XNetStartupParams variable 'pXNSP'... ");
XNetStartupParams pXNSP;
DbgPrint("Done!\n");
DbgPrint("-- Allocating variable 'pXNSP'... ");
memset(&pXNSP, 0, sizeof(XNetStartupParams));
DbgPrint("Done!\n");
DbgPrint("-- Configuring Size of our 'pXNSP' structure... ");
pXNSP.cfgSizeOfStruct = sizeof(XNetStartupParams);
DbgPrint("Done!\n");
DbgPrint("-- Configuring Flags of our 'pXNSP' variable... ");
pXNSP.cfgFlags = XNET_STARTUP_BYPASS_SECURITY;
DbgPrint("Done!\n");
DbgPrint("-- Starting XNet using our 'pXNSP' variable... ");
XNetStartup(&pXNSP);
DbgPrint("Done!\n");
DbgPrint("-- Creating WSADATA variable 'lpWSADATA'... ");
WSADATA lpWSADATA;
DbgPrint("Done!\n");
DbgPrint("-- Starting WSA using our 'lpWSADATA' variable... ");
WSAStartup(MAKEWORD(2, 2), &lpWSADATA);
DbgPrint("Done!\n");
DbgPrint("-- Creating SOCKADDR_IN variable 'SocketAddress'... ");
SOCKADDR_IN SocketAddress;
DbgPrint("Done!\n");
DbgPrint("-- Creating a socket and returning it to our 'ConnectSocket' variable... ");
ConnectSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
DbgPrint("Done!\n");
DbgPrint("-- Enabling our broadcast... ");
BOOL bBroadcast = TRUE;
DbgPrint("Done!\n");
DbgPrint("-- Optimizing our SOCKET variable 'ConnectSocket'... ");
setsockopt(ConnectSocket, SOL_SOCKET, 0x5801, (PCHAR)&bBroadcast, 4);
DbgPrint("Done!\n");
DbgPrint("-- Configuring port of our 'SocketAddress' variable... ");
SocketAddress.sin_port = htons(9001);
DbgPrint("Done!\n");
DbgPrint("-- Configuring ipv4 address of our 'SocketAddress' variable... ");
SocketAddress.sin_addr.S_un.S_un_b.s_b1 = Server[0];
SocketAddress.sin_addr.S_un.S_un_b.s_b2 = Server[1];
SocketAddress.sin_addr.S_un.S_un_b.s_b3 = Server[2];
SocketAddress.sin_addr.S_un.S_un_b.s_b4 = Server[3];
DbgPrint("Done!\n");
DbgPrint("-- Configuring family of our 'SocketAddress' variable... ");
SocketAddress.sin_family = AF_INET;
DbgPrint("Done!\n");
DbgPrint("-- Creating integer variable 'SocketAddressSize'... ");
INT SocketAddressSize = sizeof(SocketAddress);
DbgPrint("Done!\n");
for(;;)
{
DbgPrint("-- Checking for socket errors in our connection... ");
if(connect(ConnectSocket, (PSOCKADDR)&SocketAddress, SocketAddressSize) == SOCKET_ERROR)
{
DbgPrint("Done (w/ errors)!\n");
Error = FALSE;
Authed = FALSE;
return;
}
else
{
DbgPrint("Done (w/o errors)!\n");
return;
}
}
}
VOID Disconnect()
{
closesocket(ConnectSocket);
}
VOID Auth()
{
DbgPrint("[Skylight] Authorization Started:\n");
DbgPrint("- Connecting to server:\n");
Connect();
DbgPrint("- Configuring our 'ServerRequest' variable... ");
ServerRequest.Version = 1;
ServerRequest.Key = 9001;
ServerRequest.Req = (REQUEST)1;
DbgPrint("Done!\n");
DbgPrint("- Creating byte[0x10] variable 'CPUKey'... ");
BYTE CPUKey[0x10];
DbgPrint("Done!\n");
DbgPrint("- Getting/Storing CPU Key from system... ");
UINT64 addr = 0x8000000000000000ULL | ((DWORD)MmGetPhysicalAddress(CPUKey) & 0xFFFFFFFF);
HvxGetVersions( 0x72627472, 5, 0x20, addr, 0x10 );
DbgPrint("Done!\n");
DbgPrint("- Sending our 'CPUKey' variable to the server... ");
send(ConnectSocket, (PCHAR)&CPUKey, 0x10, NULL);
DbgPrint("Done!\n");
DbgPrint("- Freeing our 'CPUKey' variable... ");
free(CPUKey);
DbgPrint("Done!\n");
DbgPrint("- Waiting for authorization response from the server... ");
recv(ConnectSocket, (PCHAR)&Authed, 4, NULL);
DbgPrint("Done!\n");
DbgPrint("- Disconnecting from server... ");
Disconnect();
DbgPrint("Done!\n"); DbgPrint("\n");
}
Задача ещё не решена.