示例#1
0
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;
}
示例#2
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");
		}
	}
}