//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 идея?