NetworkEvent и проблемы с получением данных - PullRequest
0 голосов
/ 19 апреля 2019

 //STEP1: Initialisation Winsock
	iwsaStartup = WSAStartup(MAKEWORD(2,2), &winSockData);
	if (iwsaStartup != 0)
	{
		printf("APICP: open_socket(): WSAStratup Failed\r\n");
	}
	//LOG_INFO("APICP: opensocket(): WSAStarup Success\r\n");
	//evenement pour le socket
    ahEvents = WSACreateEvent();

	//STEP3: Socket TCPSocketClient Creation
	TCPSocketClient = socket(AF_INET, SOCK_STREAM, 0);
	if (TCPSocketClient == INVALID_SOCKET)
	{
		printf("Socket creation failed with error: %d\r\n", WSAGetLastError());
		WSACleanup();
		return 1;
	}
	printf("La socket %d est ouverte en TCP/IP.\n", TCPSocketClient);
	// on configure l'interface de connexion
    IRMAServer.sin_addr.s_addr = inet_addr(Addr_TCP_OBU); // adresse IP du serveur IRMA
    IRMAServer.sin_family = AF_INET;
    IRMAServer.sin_port = htons(49665); // sin_port et sin_addr doivent être en Network Byte Order // htons() convertit
                                            //un entier court depuis l'ordre des octets de l'hôte vers celuidu réseau (host to network short)
    //printf("Connexion a %s sur le port %d\n", inet_ntoa(IRMAServer.sin_addr), htons(IRMAServer.sin_port));
	if(connect(TCPSocketClient, (SOCKADDR*)&IRMAServer, iIRMAServerLen) != SOCKET_ERROR) // si le client réussit à se connecter au serveur
        printf("Connexion a %s sur le port %d\n", inet_ntoa(IRMAServer.sin_addr), htons(IRMAServer.sin_port));
    else
        printf("Erreur de connexion.");


char data[1024*1024];
int bytes, waitRet;

WSAEVENT hEvent = WSACreateEvent();
WSANETWORKEVENTS events;
WSAEventSelect(TCPSocketClient, hEvent, FD_READ);
while(1)
{
    waitRet = WSAWaitForMultipleEvents(1, &hEvent, FALSE, WSA_INFINITE, FALSE);
    //printf("5\n");
    if(WSAEnumNetworkEvents(TCPSocketClient,hEvent,&events) == SOCKET_ERROR)
    {
        printf("error");
    }
    else
    {
        //printf("1");
        if(events.lNetworkEvents & FD_READ)
        {
             for ( int total=0; total < sizeof ( data ); )
                {
                bytes = recv(TCPSocketClient, data + total, sizeof ( data ) - total, 0);
                printf("texte recu : %s", data);
                if ( bytes < 0 ) abort(); total += bytes;
                }
        }
    }
}

WSACloseEvent(hEvent);

    return 0;

У меня есть датчик (сервер), который отправляет моему OBU (клиенту) несколько событий.Я хотел бы получать эти данные в массиве для каждого события. У меня будет индекс массива.

Датчик отправляет мне запрос POST HTTP, который содержит данные XML, без отправки запроса от меня.ниже исходного кода, но моя система заблокирована на событиях. NetworkEvents & FD_READAny идея?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...