Я реализую веб-сервисы в программе CPP на WinCE.
Я поставил веб-сервер (HTTP), прослушивающий порт 8080, и унитарные тесты работают (с использованием почтальона).
Я вставил в html-страницу простой запрос ajax (GET), чтобы получить обратно массив JSON.
Начальный веб-сервер:
struct sockaddr_in serv_addr;
int optlen = 0;
struct timeval vtime;
SCK_ListenServerSocket = socket(AF_INET, SOCK_STREAM, 0);
if (SCK_ListenServerSocket < 0)
return (WBS_Service_Unavailable_503);
// Set receive timeout
optlen = sizeof(struct timeval);
if(getsockopt(SCK_ListenServerSocket, SOL_SOCKET, SO_RCVTIMEO, (char *) &vtime, &optlen) == -1)
{
closesocket(SCK_ListenServerSocket);
return (WBS_Service_Unavailable_503);
}
else
{
vtime.tv_sec = SCK_SRV_RECV_MS_TIMEOUT; // ms
vtime.tv_usec = 0;
if(setsockopt(SCK_ListenServerSocket, SOL_SOCKET, SO_RCVTIMEO, (const char *) &vtime, optlen) == -1)
{
closesocket(SCK_ListenServerSocket);
return (WBS_Service_Unavailable_503);
}
}
memset((void *)&serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = htons(port);
if (bind(SCK_ListenServerSocket, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0)
{
closesocket(SCK_ListenServerSocket);
SCK_ListenServerSocket = -1;
return (WBS_Service_Unavailable_503);
}
if(listen(SCK_ListenServerSocket, 1) < 0)
{
closesocket(SCK_ListenServerSocket);
SCK_ListenServerSocket = -1;
return (WBS_Service_Unavailable_503);
}
return ret;
В потоке эта функция вызывается:
accept_socket = accept(SCK_ListenServerSocket, NULL, NULL);
if(accept_socket < 0)
n = 0;
else
{
n = recv(accept_socket, &buffer[0], 512, 0); //Read 512 bytes
DO THE WORK
}
Эта проблема:
Когда я запускаю веб-страницу в Chrome, сокет открывается правильно, но не получен. Я не знаю почему. Когда я использую POSTMAN, это работает как шарм.
Спасибо за помощь мне.
РЕДАКТИРОВАТЬ: В этой операции сокета блокировки вызывается accept, но recv блокирует. Запуск большого количества запросов разблокирует recv, но в случае сбоя ответ recv равен 0.
Когда я загружаю сайт на WinCE (та же цель), возникает проблема. Когда сайт загружается с моего компьютера и отправляется только запрос, нет проблем
Задача ещё не решена.
Других решений пока нет …