int main() { char comm_port[100]; int tcp_port, comm_num; COMMTIMEOUTS cto = { MAXDWORD, 0, 0, 0, 0 }; //NON BLOQUANT HANDLE fd, fork_id; SOCKET sd, sd_client; struct ThreadData tData; tcp_port = TCP_PORT; comm_num = 1; printf("Win32 TCP2Xbee"); #ifdef _DEBUG_ printf(" - Active DEBUG Activated"); #endif printf("\n"); printf("COM Port Number [1]:"); if(scanf_s("%d", &comm_num)==0) comm_num = 1; printf("TCP Port [%i]:", tcp_port); if(scanf_s("%d", &tcp_port)==0) tcp_port = TCP_PORT; sprintf_s(comm_port, 100, "COM%d", comm_num); printf("Trying to Open %s\n", comm_port); openXBee(comm_port, &fd); sd=openNetwork(tcp_port); /* Switch to API Mode on the XBee device */ setAPI(&fd); COMMERR((!SetCommTimeouts(fd,&cto)?-1:0), "SetCommTimeouts"); /* Fork */ while(1) { ERR(sd_client = accept(sd, NULL, 0), "accept"); fprintf(stderr, "Client Connected\n"); tData.sock = sd_client; tData.fd = &fd; fork_id = CreateThread( NULL, 0,xbeeListen, &tData, 0, NULL); //Crée un thread pour s'occuper des datas du Xbee networkListen(sd_client, &fd); CloseHandle(fork_id); printf("xBeeListen Finished\n"); closesocket(sd_client); fprintf(stderr, "Client Disconnected\n"); } //close(sd); closesocket(sd); CloseHandle(fd); system("pause"); return 0; }
void UdpPacketReader::read() { if (!networkListen()) return; _nfpvrInterface.networkListenComplete(_socket); char localAddress[16]; networkGetLocalAddress(localAddress, sizeof(localAddress)); _nfpvrInterface.notify(INfpvrInterface::NotifyVerbose, "Your local IP is %s", localAddress); bool running = true; uint64 totalReceived = 0; while (running) { uint8 data[1028]; sockaddr_in sender; int length = _nfpvrInterface.networkReceive(_socket, (nfpvr_sockaddr_t*)&sender, data, sizeof(data)); if (length) { if (_nfpvrInterface.getOptions()._writeRaw && _rawFile) fwrite(data, length, 1, _rawFile); NetworkPacketHandler* current=0; int index=0; for (index=0; index<UDP_HANDLER_COUNT; index++) { if (_handlers[index] && _handlers[index]->isSender(sender)) { current = _handlers[index]; break; } } if (!current) { for (index=0; index<UDP_HANDLER_COUNT; index++) { if (!_handlers[index]) { current = new NetworkPacketHandler(_nfpvrInterface, sender); _handlers[index] = current; _handlerCount++; _nfpvrInterface.networkNotifyHandlerCount(_handlerCount); break; } } } if (current) { current->receive(data, length); if (current->getState() == PacketHandler::StateStopped) { delete current; _handlers[index] = 0; _handlerCount--; _nfpvrInterface.networkNotifyHandlerCount(_handlerCount); } } totalReceived += length; _nfpvrInterface.networkNotifyTotalReceived(totalReceived); } else { _nfpvrInterface.notify(INfpvrInterface::NotifyWarning, "UdpPacketReader::read, recvfrom() returned -1"); } } }