s3eSocket Marmalade не может создать сокет

Привет, я новичок в Marmalade и C ++, но я знаю программирование. Я почти везде искал в Интернете ответ на этот вопрос, но это может быть просто потому, что я еще не совсем знаю C ++.

ХОРОШО. Я пишу программу чата, которая работает с сервером PHP, и я пытаюсь сделать клиент на Marmalade с C ++. Я все еще в начале этого приложения, и когда я пытаюсь создать s3eSocket, я получаю ошибку UNSUPPORTED. Я прочитал здесь: Не могу открыть сокет C ++, что мне, возможно, нужно сделать запуск, прежде чем я смогу использовать сокеты, но я не уверен, как это сделать.

Вот мой код C ++:

#include "s3e.h"#include "s3eSocket.h"#include <string.h>
#include "s3eOSReadString.h"#include <string>

static s3eSocket* socket = NULL;
static char g_ErrorString[256];
static bool g_SocketIsConnected = false;

#define SOCKET_TIMEOUT (30000)

void Connect(const char* host, uint16 port);
void DisplayText(const char* txt);
int32 ConnectCB(s3eSocket* g_Sock, void* sys, void* data);

// Main entry point for the application
int main()
{
// Wait for a quit request from the host OS
while (!s3eDeviceCheckQuitRequest())
{
//DisplayText("Hello world!");

Connect("127.0.0.1/server.php", 9000);
}
return 0;
}

// Connect callback
int32 ConnectCB(s3eSocket* g_Sock, void* sys, void* data)
{
s3eResult res = *(s3eResult*)sys;
if (res == S3E_RESULT_SUCCESS)
g_SocketIsConnected = true;
else
g_SocketIsConnected = false;
return 0;
}

void Connect(const char* host, uint16 port)
{
socket = s3eSocketCreate(S3E_SOCKET_TCP, S3E_SOCKET_LOCAL);
if (socket == NULL)
{
DisplayText(s3eSocketGetErrorString());
return;
}

g_SocketIsConnected = false;

// look up address
s3eInetAddress addr;
memset(&addr, 0, sizeof(addr));
if (s3eInetLookup(host, &addr, NULL, NULL) == S3E_RESULT_ERROR)
{
//sprintf(g_ErrorString, "`x666666s3eInetLookup failed: %s", host);
std::string buf("`x666666s3eInetLookup failed:");
buf.append(host);
DisplayText(buf.c_str());
return;
}
addr.m_Port = s3eInetHtons(port);
int32 counter = 0;
// Using the created socket, address structure and set callback function the        Connect is called.
// A wait is performed for a minute while the connect is attempted. When             connection succeeds the
// callback sets the g_SocketIsConnected bool to true causing the waiting to stop
bool bNeedToWaitConnection = false;
if (s3eSocketConnect(socket, &addr, &ConnectCB, NULL) != S3E_RESULT_SUCCESS)
{
switch (s3eSocketGetError())
{
// These errors are 'OK', because they mean,
// that a connect is in progress
case S3E_SOCKET_ERR_INPROGRESS:
bNeedToWaitConnection = true;
break;
case S3E_SOCKET_ERR_ALREADY:
case S3E_SOCKET_ERR_WOULDBLOCK:
break;
default:
// A 'real' error happened
std::string str = "`x666666Connecting failed:\n";
std::string str2 = str.append(s3eSocketGetErrorString());
DisplayText(str2.c_str());
s3eSocketClose(socket);
socket = NULL;
return;
}
}
else
{
bNeedToWaitConnection = true;
}
if (bNeedToWaitConnection)
{
// Try to connect, but wait a maximum time of SOCKET_TIMEOUT
uint64 testStartTime = s3eTimerGetMs();
while (!s3eTimerGetMs() - testStartTime < SOCKET_TIMEOUT)
{
// Stop waiting since socket is now connected
if (g_SocketIsConnected)
break;
// Press key 4 in order to cancel connect operation
s3eKeyboardUpdate();
if (s3eKeyboardGetState(s3eKey4) & S3E_KEY_STATE_PRESSED)
{
s3eSocketClose(socket);
socket = NULL;
strcpy(g_ErrorString, "");
return;
}
//Update screen during connect operation
s3eSurfaceClear(0xff, 0xff, 0xff);
s3eDebugPrint(10, 120, g_ErrorString, 1);
sprintf(g_ErrorString, "`x666666 Trying to connect");
s3eDebugPrint(10, 80, "`x666666Press 4 to cancel connect", 0);
switch (++counter % 8)
{
case 0:
case 4:
strcat(g_ErrorString, " |"); break;
case 1:
case 5:
strcat(g_ErrorString, " /"); break;
case 2:
case 6:
strcat(g_ErrorString, " -"); break;
case 3:
case 7:
strcat(g_ErrorString, " \\"); break;
}
s3eSurfaceShow();
s3eDeviceYield(30);
}
}
if (g_SocketIsConnected == false)
{
strcpy(g_ErrorString, "`x666666Socket connecting timed out");
s3eSocketClose(socket);
socket = NULL;
}
else
{
strcpy(g_ErrorString, "");
}
}

void DisplayText(const char* txt)
{
// Fill background blue
s3eSurfaceClear(0, 0, 255);

// Print a line of debug text to the screen at top left (0,0)
// Starting the text with the ` (backtick) char followed by 'x' and a hex value
// determines the colour of the text.
s3eDebugPrint(120, 150, txt, 0);

// Flip the surface buffer to screen
s3eSurfaceShow();

// Sleep for 0ms to allow the OS to process events etc.
s3eDeviceYield(0);
}

Я нашел этот код из документации Marmalade и немного его изменил. Если кто-нибудь из вас, ребята, может дать мне место, чтобы посмотреть в будущее или помочь, это было бы здорово. Спасибо.

0

Решение

В вашем звонке:

 Connect("127.0.0.1/server.php", 9000);

В конечном итоге вы вызываете функцию:

 s3eInetLookup(host, &addr, NULL, NULL);

который ожидает IP-адрес в виде «127.0.0.1», поэтому «127.0.0.1/server.php» является недействительным. Я не уверен, что содержится в вашем файле server.php … поэтому я собираюсь предположить, что в вашем php-файле вы на самом деле создаете сокет и прослушиваете порт 9000, а затем внесение этого изменения должно решить вашу проблему. ..

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]