コード例 #1
0
ファイル: IOUtil.cpp プロジェクト: denofiend/code-lib
void IOUtil::createSocketPair(int pair[2]) throw (IOException&)
{
#if defined(WIN32)
	Socket connectSocket;
	Socket serverClientSocket;
	ServerSocket listenSocket;

	SocketAddress loopback = SocketAddress::loopback(AF_INET, 0);
	listenSocket.listen(loopback, 5, false);
	connectSocket.connect(listenSocket.getLocalAddress(), true);

	if (!listenSocket.accept(serverClientSocket))
	{
		THROW2(IOException, "Can't accept for socket pair");
	}

	pair[0] = connectSocket.detach();
	pair[1] = serverClientSocket.detach();
#else
	if (0 != ::socketpair(AF_LOCAL, SOCK_STREAM, 0, pair))
	{
		THROW2(IOException, "Can't create socket pair");
	}
#endif
}
コード例 #2
0
ファイル: server.cpp プロジェクト: x00one/LiteServer
int main (int argc, char* argv[]) {
    struct sigaction sa;
    memset(&sa, 0, sizeof(sa));
    sa.sa_handler = &sig_handler;

    sigaction(SIGINT, &sa, NULL);


    IniParser* ini = new IniParser("server.ini");
    documentRoot = ini->get("document_root");
    std::string port = ini->get("port");
    delete(ini);
    
    ServerSocket* server = new ServerSocket(port);
    ClientSocket* client = NULL;

    while (!stop) {
        client = server->accept(true);
        
        if (client != NULL) {
            pthread_t tid;
            pthread_create(&tid, NULL, &clientThread, client);
            pthread_detach(tid);
        }
    }
    
    delete(server);

    std::cout << "Shutdown complete." << std::endl;
    
    return 0;
}
コード例 #3
0
ファイル: server_main.cpp プロジェクト: JanetGuo/cs353-final
int main (){
  cout << "server running...." << endl;
  try{                                  
    ServerSocket server ( 30000 );      // Create main server socket
    while ( true ){                     // server runs forever
      ServerSocket new_sock;            // bind user socket to port and listen
      server.accept ( new_sock );
      printUsage();
      try{
	while ( true ){
	  char command[256];	        //user input
	  string reply;	                //command from client
	  cout << "> ";  
	  cin.getline(command,256);
	  if (strlen(command) == 0)     //re-prompt user if input is empty
	    continue;
	  new_sock << string(command);  //send command to create
	  new_sock >> reply;	        //read confirmation
	  cout << reply <<endl;
	}
      }catch ( SocketException& ) {}
    }
  }
  catch ( SocketException& e ){
    cout << "Exception was caught:" << e.description() << endl << "Exiting.";
  } 
  return 0;
}
コード例 #4
0
ファイル: main.cpp プロジェクト: Retoxified/CPPS_Machiavelli
int main(int argc, const char * argv[])
{
	m_g = make_shared<Game>(Game());

    // start command consumer thread
    thread consumer {consume_command};

	// keep client threads here, so we don't need to detach them
	vector<thread> handlers;
	    
	// create a server socket
	ServerSocket server {machiavelli::tcp_port};

	while (true) {
		try {
			while (true) {
				// wait for connection from client; will create new socket
				cerr << "server listening" << '\n';
				unique_ptr<Socket> client {server.accept()};

				// communicate with client over new socket in separate thread
                thread handler {handle_client, move(client)};
				handlers.push_back(move(handler));
			}
		} catch (const exception& ex) {
			cerr << ex.what() << ", resuming..." << '\n';
        } catch (...) {
            cerr << "problems, problems, but: keep calm and carry on!\n";
        }
	}
    return 0;
}
コード例 #5
0
ファイル: Main.cpp プロジェクト: ccosmin/eventloop
int main()
{
  /*
  StdWriteRead stdWriteRead;
  runloop.registerReadIntent(fileno(stdin), &stdWriteRead);
  runloop.run();
  */
  /*
  try
  {
    RunLoop runloop;
    Socket socket;
    socket.connect("localhost", 22, false);
    int sock = socket.getSocket();
    StdWriteRead stdWriteRead(sock);
    runloop.registerReadIntent(sock, &stdWriteRead);
    runloop.run();
  } 
  catch ( std::runtime_error r )
  {
    fprintf(stderr, r.what());
  }
  */
  ServerSocket serverSocket;
  serverSocket.listen("0.0.0.0", 3000, 10);
  std::string ip;
  serverSocket.accept(&ip, NULL);
  printf("socket: %s\n", ip.c_str());
}
コード例 #6
0
ファイル: app.cpp プロジェクト: VladimirCourse/Small-DBMS
int main(){
	
 	Database db("database");
  //listening requests
  try{
      // Create the socket
    ServerSocket server ( 30000 );
    while(true){
      ServerSocket new_sock;
      server.accept (new_sock);
      try{
        std::string data;
        new_sock >> data;
        std::string *res = db.request(data);
        new_sock << *res;
        delete res;
      }catch (SocketException& e){
        std::cout << "Something go wrong: " << e.description() << "\nExiting.\n";
      }

    }
  }
  catch (SocketException& e){
    std::cout << "Something go wrong: " << e.description() << "\nExiting.\n";
  }

  return 0;
}
コード例 #7
0
 bool accept(int port, string address = "0")
 {
     inactiveTime = 0;
     ServerSocket* serverSocket = new ServerSocket();
     socket = serverSocket;
     return serverSocket->accept(port, address);
 }
コード例 #8
0
int main ( int argc, int argv[] )
{
  std::cout << "running....\n";

  try
    {
      // Create the socket
      ServerSocket server ( 6006 );

      while ( true )
	{

	  ServerSocket new_sock;
	  server.accept ( new_sock );

	  try
	    {
	      while ( true )
		{
		  char *data;
		  //new_sock >> data;
		  new_sock << "Mesaje";
		}
	    }
	  catch ( SocketException& ) {}

	}
    }
  catch ( SocketException& e )
    {
      cout << "Exception was caught:" << e.description() << "\nExiting.\n";
    }

  return 0;
}
コード例 #9
0
        virtual void run(){
            try{
                unsigned char buf[1000];

                ServerSocket server;
                server.bind( "127.0.0.1", SocketFactoryTest::DEFAULT_PORT );

                net::Socket* socket = server.accept();
                server.close();

                socket->setSoLinger( false, 0 );

                synchronized(&mutex)
                {
                    numClients++;
                    mutex.notifyAll();
                }

                while( !done && socket != NULL ){

                    io::InputStream* stream = socket->getInputStream();
                    memset( buf, 0, 1000 );
                    try{
                        if( stream->read( buf, 1000, 0, 1000 ) == -1 ) {
                            done = true;
                            continue;
                        }

                        lastMessage = (char*)buf;

                        if( strcmp( (char*)buf, "reply" ) == 0 ){
                            io::OutputStream* output = socket->getOutputStream();
                            output->write( (unsigned char*)"hello", (int)strlen("hello"), 0, (int)strlen("hello") );
                        }

                    }catch( io::IOException& ex ){
                        done = true;
                    }
                }

                socket->close();
                delete socket;

                numClients--;

                synchronized(&mutex) {
                    mutex.notifyAll();
                }

            }catch( io::IOException& ex ){
                printf("%s\n", ex.getMessage().c_str() );
                CPPUNIT_ASSERT( false );
            }catch( ... ){
                CPPUNIT_ASSERT( false );
            }
        }
コード例 #10
0
ファイル: YaoProtocol.cpp プロジェクト: lpkruger/sfe-tools
static int _main(int argc, char **argv) {
	vector<string> args(argc-1);
	for (int i=1; i<argc; ++i) {
		args[i-1] = argv[i];
	}

	args.at(0);
	//YaoProtocol yao;
	Socket *s;

	ifstream fmtin("/home/louis/sfe/priveq.fmt");
	FmtFile fmt = FmtFile::parseFmt(fmtin);
	cout << "Read fmt file" << endl;
	ifstream in("/home/louis/sfe/priveq.circ");
	Circuit_p cc = Circuit::parseCirc(in);

	if (args[0] == ("A")) {
		args.at(1);
		BigInt n = BigInt::parseString(args[1]);
		bit_vector input_bits = toBits(n, fmt.numInputs(0));

		cout << "connecting" << endl;
		s = new Socket("localhost", 5437);
		DataOutput *out = s->getOutput();
		DataInput *in = s->getInput();
		YaoSender cli;
		cli.setStreams(in, out);
		cli.go(cc, fmt, input_bits);
		delete out;
		delete in;
		delete s;
	} else if (args[0] == ("B")) {
		args.at(1);
		BigInt n = BigInt::parseString(args[1]);
		bit_vector input_bits = toBits(n, fmt.numInputs(1));

		args.at(1);
		YaoChooser srv;

		cout << "listening" << endl;
		ServerSocket *ss = new ServerSocket(5437);
		s = ss->accept();
		DataOutput *out = s->getOutput();
		DataInput *in = s->getInput();
		srv.setStreams(in, out);
		bit_vector circ_out = srv.go(cc, fmt, input_bits);
		for (uint i=0; i<circ_out.size(); ++i) {
			cout << "output " << i << ": " << circ_out[i] << endl;
		}
		delete s;
		delete ss;
		delete out;
		delete in;
	}
	return 0;
}
コード例 #11
0
int main ( int argc, char **argv )
{
  std::cout << "running....\n"; //Indicate that the server is running
  refreshSnippets(); //refresh the snippets to make sure everything is running properly
  //Error handling for creating the sockets
  try
    {
      // Create the socket
      ServerSocket server (7777);
      while (true)
		{
		  ServerSocket serverSocket; //Create the server socket 
		  server.accept (serverSocket);
		  //Error handling for receiving the data
		  try { while(true)
			{
			  string input; //Input variable from the client
			  serverSocket > input; //Direct the input from the socket to the variable
			  //Check for a certain flag
			  if(input == "-i")
			  {
			  	// Write the reply back to the client
			  	serverSocket << "Snippet inserted";
			  	while(1) //While true
			  	{
				  	string snippetIn; //String variable for incoming snippet
				  	serverSocket > snippetIn; //Redirect the socket data to the variable
				  	if(snippetIn == "\0") break; //Check to see if we have a terminating character
				  	writeMessage(snippetIn.c_str()); //If not, write the serialized data to a file
				  	updateDesktopFile(); //Refresh the desktop file
			  	}
			  };
			  //Check for certain flags
			  if(input == "-c")
			  {
			  	serverSocket << "Snippets Cleared"; //Let the client know the server was cleared
			  	ofstream myfile ("snippet.txt"); //Open file without append flags
			  	myfile << "\n"; 
			  	myfile.close(); // Close file
			  	updateDesktopFile(); //Update desktop file
			  };
			}// end while(true)
		    }
		   //Catch any exception thrown by the socket 
		  catch ( SocketException& ){}
		}//Close the top while(true)
    }// close try
  //Catch any exception thrown by the socket while exiting
  catch ( SocketException& e ) {std::cout << "Exception " << e.description() << "\n while the socket was Exiting.\n";};

  return 0;
}
コード例 #12
0
ファイル: main.cpp プロジェクト: rezarazavi/MyRO
//this thread handles socket connection to the network
void * ServerThread(void * str)
{
	printf("ServerThread Started \n");
	CHKcon=0;
	// Create the socket
	ServerSocket server ( 30000 );
    while(true)
    {
		ServerSocket new_sock;
		server.accept ( new_sock );//start listening to port 30000
		try
		{
			//cvNamedWindow("thresh");/////////////delet it
			while (true)
			{
						////////////ball tracking
						//IplImage frame0;
						//frame0=img0;
						//IplImage* imgHSV = cvCreateImage(cvGetSize(&frame0),8,3);
						//cvCvtColor(&frame0,imgHSV, CV_BGR2HSV);
						//IplImage* imgThreshed= cvCreateImage(cvGetSize(&frame0),8,1);
						//cvInRangeS(imgHSV,cvScalar(20,100,100),cvScalar(30,255,255),imgThreshed);
						//cvReleaseImage(&imgHSV);
						
						//////////////////////
				std::string data;
				new_sock >> data;
				if(data.length()>2)
					if((data[0]=='*')&&(data[1]=='#')&&(data[data.length()-1]=='*'))
					{
						CHKcon=0;//resets connection check timer
						switch (data[2])
						{
							case 'M'://Motors instruction
								if(data.length()==6)
								{
									//printf("%d %d \n",int(data[3])-128,int(data[4])-128);
									runmotors((int(data[3])-64)*4,(int(data[4])-64)*4);
								}
								break;
							case 'S':
								festivalst= data.substr(3,data.length()-4);
							break;
						}
					}
				new_sock << data;
			 }
		}
		catch ( SocketException& ) {}	
		usleep(1000);
	}
}
コード例 #13
0
int run() {
    groomLogFile();
    if (runMode.compare("daemon") == 0) {
        dup2(ferr, 2);
        dup2(2, 1);
    }
    port = config["port"];
	ServerSocket* ss = NULL;
	debug = 1;
	b64_hmt = base64_encode((const unsigned char*) JPEGImage::StdHuffmanTable, 420, (size_t*) & b64_hmt_l);
    WSServer* wss = new WSServer(
        config["hostName"],
        config["lwsDebug"],
        config["HTTPPort"],
        config["HTTPSPort"],
        config["sslCert"],
        config["sslKey"],
        config["sslCA"]
    );
	try {
		ss = new ServerSocket(port);
	} catch (SocketException e) {
		ffl_err(FPL_MAIN, "Unable to create socket on port: %d", port);
	}
	while (ss && !force_exit && (duration == 0 || duration > (time(NULL) - starttime))) {
		try {
			ffl_notice(FPL_MAIN, "waiting for a connection on %d ...", port);
			FerryStream* fs = new FerryStream(ss->accept(),
					&ferryStreamFuneral);
			cleanDeadFSList();
			ffl_notice(FPL_MAIN, "a connection accepted.");
		} catch (SocketException e) {
			ffl_warn(FPL_MAIN, "Exception accepting incoming connection: %s",
					e.description().c_str());
		} catch (FerryStream::Exception e) {
			ffl_err(FPL_MAIN, "Exception creating a new FerryStream: %s",
					e.what());
		}
	}
	force_exit = 1;
	sleep(5);
	cleanDeadFSList();
	cleanLiveFSList();
	delete ss;
	delete wss;
	terminate_all_paths();
	free(b64_hmt);
	ffl_notice(FPL_MAIN, "BYE!");
	return 0;
}
コード例 #14
0
ファイル: Server_main.cpp プロジェクト: sarvani13/Source
void Communication()
{
	try
  {
    // Create the socket
    ServerSocket server (port);
		int rounds = 16;
		string rStr = "";

    while ( true )
	  {
			//ServerSocket new_sock;
  	  server.accept (new_sock);
			stop = false;
			weFinish = false;
  	  try
      {
  	      while ( true )
          {
            std::string data;
						cout << "Waiting for command..." << endl;
  		      new_sock >> data;
            cout << "Received :: " << data << endl;
						if(data != "Stop")
						{
            	rounds = std::stoi(data);
							std::thread (ExecuteThreads_high, rounds).detach();
							std::thread (checkFinish).detach();
							cout << "Started Computing..." << endl;
						}
						else
						{
							cout << "Stopped... Check at other server for answer" << endl;
							stop = true;
							break;
						}
  		    }
  	  }
      catch ( SocketException& e) {
				//cout << e.description()<< endl;
			}
			cout << "------------ Completed Successfully ---------------\n";
  	}
  }
  catch ( SocketException& e )
  {
      cout << "Exception was caught:" << e.description() << "\nExiting.\n";
  }
}
コード例 #15
0
int main(int argc,char **argv) {
	cout << "running...." << endl;
	ServerSocket *server;

	try
	{
		server = new ServerSocket(30000);	// 等待client連線
	}
	catch ( SocketException& e )
	{
		cout << "Exception was caught:" << e.description() << "\nExiting.\n";
		return -1;
	}

	while(true)
	{
		try
		{
			struct imagedata image;
			// 把第一個資料填入
			memset(&image,1,sizeof(struct imagedata));	// 不可以填0,否則會出現錯誤,可能是所有成員都必需要有資料
			image.r_pixel[0][0]='P';	// 先填一個數值進去,到client端再讀取出來,看是否有錯誤
			// 把資料寫到before - start
			FILE *fp;
			fp = fopen("before","wb");
			fwrite(&image,1,sizeof(struct imagedata),fp);
			fclose(fp);
			// 把資料寫到before - end
			char data[MAXRECV];
			while(true)
			{
				memset(data,0,MAXRECV);
				//*server >> data;
				//::SDFile(server,"realalt180.exe");
				::SDStruct(server,(char*)&image);	// 送資料
				printf("%s\n",data);
			}
		}
		catch (SocketException &)
		{
			server->close_connfd();
			server->accept();
		}
	}
	return 0;
}
コード例 #16
0
int main ( int argc, char* argv[] )
{
	std::cout << "running....\n";
	
	try
    {
		// Create the socket
		// ServerSocket server ( 30000 );
		ServerSocket server (12354);
		
		while ( true )
		{

	  ServerSocket new_sock;
	  server.accept ( new_sock );

	  try
	    {
	      while ( true )
		{
		  std::string data;
		  new_sock >> data;
		  std::cout << data << std::endl;

		  ofstream outfile("/home/kora/桌面/log.txt", ios::app);
		  outfile << data << endl;
		  outfile.close();

		  new_sock << data;
		}
	    }
	  catch ( SocketException& ) {}

	}
    }
  catch ( SocketException& e )
    {
      std::cout << "Exception was caught:" << e.description() << "\nExiting.\n";
    }

  return 0;
}
コード例 #17
0
int main(int argc, int argv[]) {
    std::cout << "running....\n";

    Message message("topas", "Hello World"), m2("topas", "where are you?"),
        m3("guest", "Hi");

    MessageStack messages;
    messages.append(&message);
    messages.append(&m2);
    messages.append(&m3);

    pthread_t tid;
    pthread_attr_t attr;

    pthread_attr_init(&attr);
    pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);

    try {
        pthread_create(&tid, &attr, &game, NULL);
        while (true) {

            try{
                ServerSocket *new_sock = new ServerSocket;
                server.accept(*new_sock);

                pthread_create(&tid, &attr, &rundle, new_sock);
            }
            catch (SocketException& e) {
                std::cout << "Exception was caught:" << e.description()
                        << "\nExiting.\n";
            }
        }
    } catch (SocketException& e) {
        std::cout << "Exception was caught:" << e.description()
                << "\nExiting.\n";
    }

    return 0;
}
コード例 #18
0
int main ( int argc, int argv[] )
{
   std::cout << "running....\n" << std::flush;

   try
   {
      // Create the socket
      ServerSocket server ( 30000 );
      
      while ( true )
      {

	  ServerSocket new_sock;
	  server.accept ( new_sock );

	  try
          {
             while ( true )
             {
                std::string data;
                new_sock >> data;
                std::cout << data << std::flush;
                new_sock << data;
             }
          }
	  catch ( SocketException& ) 
          {
          }
      }
   }
   catch ( SocketException& e )
   {
      std::cout << "Exception was caught:" << e.description() << "\nExiting.\n";
   }
   
   return 0;
}
コード例 #19
0
ファイル: TestSockets.cpp プロジェクト: Antidote00/KLib
TEST(Sockets, data) {

	ServerSocket ssck;
	ssck.bind(1337);

	NetworkAddress addr1("127.0.0.1", 1337);
	Socket sck1;
	sck1.connect(addr1);

	Socket* sck2 = ssck.accept();

	std::string lipsum = TestHelper::getLoremIpsum();
	uint8_t* data = (uint8_t*) lipsum.data();
	unsigned int len = (unsigned int) lipsum.size();

	SocketInputStream* s1in = sck1.getInputStream();
	SocketOutputStream* s2out = sck2->getOutputStream();

	s2out->write(128);
	ASSERT_EQ(128, s1in->read());

	s2out->write(data, len);
	for (unsigned int i = 0; i < len; ++i) {
		ASSERT_EQ(data[i], s1in->read());
	}

	s1in->close();
	ASSERT_THROW(s1in->read(), SocketException);
	s2out->write(128);
	ASSERT_THROW(s2out->write(128), SocketException);

	//ASSERT_EQ(-1, s1in.read());


	delete sck2;

}
コード例 #20
0
int main ( int argc, int argv[] )
{
  std::cout << "running....\n";

  try
    {
      // Create the socket
      ServerSocket server ( 44444 );

      while ( true )
	{

	  ServerSocket new_sock;
	  server.accept ( new_sock );

	  try
	    {
	      while ( true )
		{
		  std::string data;
		  new_sock >> data;
		  std::cout << "Received this response from client:\n\"" << data << "\"\n";;
		  new_sock << data;
		}
	    }
	  catch ( SocketException& ) {}

	}
    }
  catch ( SocketException& e )
    {
      std::cout << "Exception was caught:" << e.description() << "\nExiting.\n";
    }

  return 0;
}
コード例 #21
0
void* APR_THREAD_FUNC SocketHubAppender::monitor(apr_thread_t* /* thread */, void* data) {
        SocketHubAppender* pThis = (SocketHubAppender*) data;

        ServerSocket* serverSocket = 0;

        try
        {
                serverSocket = new ServerSocket(pThis->port);
                serverSocket->setSoTimeout(1000);
        }
        catch (SocketException& e)
        {
                LogLog::error(LOG4CXX_STR("exception setting timeout, shutting down server socket."), e);
                delete serverSocket;
                return NULL;
        }

        bool stopRunning = pThis->closed;
        while (!stopRunning)
        {
                SocketPtr socket;
                try
                {
                        socket = serverSocket->accept();
                }
                catch (InterruptedIOException&)
                {
                        // timeout occurred, so just loop
                }
                catch (SocketException& e)
                {
                        LogLog::error(LOG4CXX_STR("exception accepting socket, shutting down server socket."), e);
                        stopRunning = true;
                }
                catch (IOException& e)
                {
                        LogLog::error(LOG4CXX_STR("exception accepting socket."), e);
                }

                // if there was a socket accepted
                if (socket != 0)
                {
                        try
                        {
                                InetAddressPtr remoteAddress = socket->getInetAddress();
                                LogLog::debug(LOG4CXX_STR("accepting connection from ")
                                       + remoteAddress->getHostName()
                                       + LOG4CXX_STR(" (")
                                       + remoteAddress->getHostAddress()
                                       + LOG4CXX_STR(")"));

                                // add it to the oosList.
                                synchronized sync(pThis->mutex);
                                OutputStreamPtr os(new SocketOutputStream(socket));
                                Pool p;
                                ObjectOutputStreamPtr oos(new ObjectOutputStream(os, p));
                                pThis->streams.push_back(oos);
                        }
                        catch (IOException& e)
                        {
                                LogLog::error(LOG4CXX_STR("exception creating output stream on socket."), e);
                        }
                }
                stopRunning = (stopRunning || pThis->closed);
        }
        delete serverSocket;
        return NULL;
}
コード例 #22
0
 void ManagerServer::run()
 {
     bool running = true;
     bool *move = new bool[4] {{0}};
     bool shoot = 0;
     
     bool gift1 = 0;
     bool gift2 = 0;
     sf::Event event;
        
     gui->getWindow()->clear();
        
if(gui->drawMenu(menu))
{		
     while (running)
    {

		std::string dataServer = " ";
		std::string dataClient;
		
		std::cout << "running....\n";
		
		try
		{
			//Create the socket
			ServerSocket server ( 30000 );
			ServerSocket server_socket;
			server.accept ( server_socket );
	
			try
			{
				 
				 while(gui->getWindow()->pollEvent(event))
                        {
                                switch(event.type)
                                {
                                        case sf::Event::Closed:
                                        {
                                                gui->getWindow()->close();
                                                return;
                                        }

                                        case sf::Event::KeyPressed:
                                        {
                                                switch(event.key.code)
                                                {
                                                        case sf::Keyboard::Right:
                                                        {
                                                                move[0]=1;
                                                                break;
                                                        }
                                                        case sf::Keyboard::Up:
                                                        {
                                                                move[1]=1;
                                                                break;
                                                        }
                                                        case sf::Keyboard::Left:
                                                        {
                                                                move[2]=1;
                                                                break;
                                                        }
                                                        case sf::Keyboard::Down:
                                                        {
                                                                move[3]=1;
                                                                break;
                                                        }

                                                        case sf::Keyboard::Space:
                                                        {
                                                                shoot=1;
                                                                break;
                                                        }
                                                }
                                                break;
                                        }

                                        case sf::Event::KeyReleased:
                                        {
                                                switch(event.key.code)
                                                {
                                                        case sf::Keyboard::Right:
                                                        {
                                                                move[0]=0;
                                                                break;
                                                        }
                                                        case sf::Keyboard::Up:
                                                        {
                                                                move[1]=0;
                                                                break;
                                                        }
                                                        case sf::Keyboard::Left:
                                                        {
                                                                move[2]=0;
                                                                break;
                                                        }
                                                        case sf::Keyboard::Down:
                                                        {
                                                                move[3]=0;
                                                                break;
                                                        }
                                                        /*case sf::Keyboard::Space:
                                                        {
                                                                shoot=0;
                                                                break;
                                                        }*/

                                                }
                                                break;
                                        }
                                }
                        		
                        }
                        
                        dataServer = bomber2->move2(move ,obs , wall ,bomber1);
                                
                        if(shoot)
                        {
								dataServer = bomb2->shoot2(bomber2 , bomb2timer);
								shoot=0;
						}
								
						server_socket >> dataClient;
						server_socket << dataServer;
								
						bomber1->move1(dataClient , obs  , wall , bomber2);
						bomb1->shoot1(dataClient , bomber1 , bomb1timer);

						for(int i=0; i<6 ; i++)
						{
								if ( gift[i].getGift(bomber1) == 1)
									gift1 = 1;
									
								if ( gift[i].getGift(bomber2) == 1)
									gift2 = 1;
						}
						
						gui->drawBack();
						gui->drawBomber(bomber1,true);
						gui->drawBomber(bomber2,false);
						gui->drawWall(wall);
						gui->drawTimer(timer);
						gui->drawGift(gift);
						gui->drawObs(obs);
						
						if(bomb1timer->getSeconds()<4)
							bomb1timer->handletime();
							
						if(bomb2timer->getSeconds()<4)
						    bomb2timer->handletime();
					
						if(bomb1timer->getSeconds()>=1 && bomb1timer->getSeconds()<=3)
						{	
							gui->drawBomb(bomb1);
						}
							
						
						if(bomb1timer->getSeconds()==3)
						{
								sf::Music b;
								if (!b.openFromFile("howto.wav")) {}
								b.play();
								
								if(gift1 == 1)
								{
									bomb1->explodeGift(obs , bomber1 ,bomber2);
								}	
							
								
							bomb1->explode(obs , bomber1 ,bomber2);
						}	
						
						if(bomb2timer->getSeconds()>=1 && bomb2timer->getSeconds()<=3)
						{	
							gui->drawBomb(bomb2);
						}
							
						
						if(bomb2timer->getSeconds()==3)
						{
							
								sf::Music b;
								if (!b.openFromFile("howto.wav")) {}
								b.play();
							
								if(gift2 == 1)
								{
									bomb2->explodeGift(obs , bomber1 ,bomber2);
								}	
							
								
							bomb2->explode(obs , bomber1 ,bomber2);
						}
						
						if(bomber2->getIsExist()==0 && bomber1->getIsExist()==1){gui->drawGameover();}
							
							
						if(bomber2->getIsExist()==1 && bomber1->getIsExist()==0){gui->drawWin();}
							
					
						gui->getWindow()->display();	
						
						server_socket >> dataClient;
						server_socket << dataServer;	
			}
			   	  
			 catch ( SocketException& ) { std::cout << "error " ;}
			 
		}

		
		catch ( SocketException& e )
		{
			 //gui->drawLoading();
			 //gui->getWindow()->display();
			 std::cout << "Exception was caught:" << e.description() << "\nExiting.\n";
		}
			
                        
	}
}		
}
コード例 #23
0
int main ( int argc, char *argv[] ){
//cout << "running....\n";
try{
	// Create the socket
	ServerSocket server ( 30000 );

	Aria::init();
	Arnl::init();

	ArRobot robot;
	ArArgumentParser parser(&argc, argv);
	parser.loadDefaultArguments();
	ArSonarDevice sonar;
	ArSimpleConnector simpleConnector(&parser);

	// Our server for mobile eyes
	ArServerBase moServer;

	// Set up our simpleOpener
	ArServerSimpleOpener simpleOpener(&parser);

	parser.loadDefaultArguments();
  	if (!Aria::parseArgs () || !parser.checkHelpAndWarnUnparsed()){
    		Aria::logOptions ();
   		Aria::exit (1);
  	}

	//Add the sonar to the robot
	robot.addRangeDevice(&sonar);

  	// Look for map in the current directory
  	ArMap arMap;
  	// set it up to ignore empty file names (otherwise the parseFile
  	// on the config will fail)
  	arMap.setIgnoreEmptyFileName (true);

	// First open the server 
	if (!simpleOpener.open(&moServer)){
		if (simpleOpener.wasUserFileBad())
    			ArLog::log(ArLog::Normal, "Bad user file");
		else
    			ArLog::log(ArLog::Normal, "Could not open server port");
  		exit(2);
	}

        // Connect to the robot
        if (!simpleConnector.connectRobot (&robot)){
                ArLog::log (ArLog::Normal, "Could not connect to robot... exiting");
                Aria::exit (3);
        }

	// Create the localization task (it will start its own thread here)
	ArSonarLocalizationTask locTask(&robot, &sonar, &arMap);

	ArLocalizationManager locManager(&robot, &arMap);

	ArLog::log(ArLog::Normal, "Creating sonar localization task");
	locManager.addLocalizationTask(&locTask);




	// Set the initial pose to the robot's "Home" position from the map, or
	// (0,0,0) if none, then let the localization thread take over.
	locTask.localizeRobotAtHomeNonBlocking();

	//Create the path planning task
	ArPathPlanningTask pathTask(&robot,&sonar,&arMap);

	ArLog::log(ArLog::Normal, "Robot Server: Connected.");

	robot.enableMotors();
	robot.clearDirectMotion();

	// Start the robot processing cycle running in the background.
	// True parameter means that if the connection is lost, then the
	// run loop ends.
	robot.runAsync(true);

	// Read in parameter files.
  	Aria::getConfig ()->useArgumentParser (&parser);
  	if (!Aria::getConfig ()->parseFile (Arnl::getTypicalParamFileName ())){
		ArLog::log (ArLog::Normal, "Trouble loading configuration file, exiting");
		Aria::exit (5);
	}

	//Create the three states
	robot.lock();
	Follow follow = Follow(&robot,&sonar);
	GoTo goTo(&robot,&pathTask,&arMap);
	Search s(&robot,&sonar);

	// Bumpers.
  	ArBumpers bumpers;
  	robot.addRangeDevice(&bumpers);
  	pathTask.addRangeDevice(&bumpers, ArPathPlanningTask::CURRENT);

  	// Forbidden regions from the map
  	ArForbiddenRangeDevice forbidden(&arMap);
  	robot.addRangeDevice(&forbidden);
  	pathTask.addRangeDevice(&forbidden, ArPathPlanningTask::CURRENT);

  	// Mode To stop and remain stopped:
  	ArServerModeStop modeStop(&moServer, &robot);

  	// Action to slow down robot when localization score drops but not lost.
  	ArActionSlowDownWhenNotCertain actionSlowDown(&locTask);
  	pathTask.getPathPlanActionGroup()->addAction(&actionSlowDown, 140);

  	// Action to stop the robot when localization is "lost" (score too low)
  	ArActionLost actionLostPath(&locTask, &pathTask);
  	pathTask.getPathPlanActionGroup()->addAction(&actionLostPath, 150);

	// These provide various kinds of information to the client:
	ArServerInfoRobot serverInfoRobot(&moServer, &robot);
	ArServerInfoSensor serverInfoSensor(&moServer, &robot);
	ArServerInfoPath serverInfoPath(&moServer, &robot, &pathTask);
	
	// Provide the map to the client (and related controls):
	// This uses both lines and points now, since everything except
	// sonar localization uses both (path planning with sonar still uses both)
  	ArServerHandlerMap serverMap(&moServer, &arMap);
	
	// Provides localization info and allows the client (MobileEyes) to relocalize at a given
	// pose:
	ArServerInfoLocalization serverInfoLocalization(&moServer, &robot, &locTask);
	ArServerHandlerLocalization serverLocHandler(&moServer, &robot, &locTask);

	robot.unlock();

	moServer.runAsync();

	//Main loop
	while (true){
		//The socket to accept connection
		ServerSocket new_sock;
		server.accept ( new_sock );
		int state = 1;		//1 = Follow, 2 = Search, 3 = GoTo
		int lastPos[2];		//Storing last position of BB to search the target
		int data[2];		//matrix with X,Y of BB
		try{
			while ( true ){
				//receive data from tld
				new_sock >> data;
				//cout << data[0] << "," << data[1] << endl;

				if(data[0] != -1)
					lastPos[0] = data[0];

				//cout << state <<endl; //for debugging
				//Main logic
				switch(state){

					case 1:
						cout << "Following target\n";
						state = follow.run(data);
					break;
					case 2:
						cout << "Searching for target\n";
						state = s.seek(lastPos, data);
					break;
					case 3:
						cout << "Going to ...\n";
						state = goTo.run(data);
					break;
					default:
						cout << "Not a case for state\n";
					break;
				}
				std::cout << "Loc score: " << locTask.getLocalizationScore() << std::endl;
			}
		}
		catch ( SocketException& ) {
			cout << "Lost Connection" << endl;
			robot.lock();
			robot.stop();
			robot.unlock();
		}
	}
}
catch ( SocketException& e ){
	std::cout << "Exception was caught:" << e.description() << "\nExiting.\n";
}

ArLog::log(ArLog::Normal, "RobotServer: Exiting.");
return 0;
}
コード例 #24
0
ファイル: main.cpp プロジェクト: BaseOfTheClick/SETIJam
int main(int argc, char *argv[])
{
    LogFile log("test.log");

    log << "**************************"
        << "New server session started";

    Address addr(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if(!addr.getHost(HOST, PORT))
    {
        logHost(log, "Unable to resolve");
        return 1;
    }
    else
    {
        logHost(log, "Resolved");
    }

    ServerSocket server;
    if(server.bind(addr) <= 0)
    {
        logHost(log, "Unable to bind to");
        return 2;
    }
    else
    {
        logHost(log, "Bound to");
    }

    cout << "Server FD: " << server << endl;

    if(!server.listen(10))
    {
        logHost(log, "Unable to listen on");
        return 3;
    }
    else
    {
        logHost(log, "Listening on");
        cout << "Listening on " << HOST << ":" << PORT << endl;
    }

    // Client and select poll structure setup
    //vector<ClientSocket> clients;
    map<int, unique_ptr<ClientSocket>> table;
    map<int, string> names;
    Multiplexer select;

    server.setNonBlock(1);
    select.insert(server);

    Galaxy galaxy;

    while(true)
    {
        if(select.poll() == -1)
        {
            cerr << "select.poll() error\n";
            break;
        }

        for(int i = 0; i < FD_SETSIZE; ++i)
        {
            if(select.setRead(i))
            {
                if(server == i)
                {
                    ClientSocket *client = new ClientSocket(server.accept());

                    if(client)
                    {
                        client->setNonBlock(1);
                        select.insert(*client);
                        table[*client] = unique_ptr<ClientSocket>(client);
                    }
                    else
                        log << "A client was rejected from the server";

                    continue;
                }

                char buf[256];
                int bytes = recv(i, &buf[0], 255, 0);
                if(bytes <= 0)
                {
                    table[i]->close();
                    galaxy.rmPlayer(names[i]);
                    select.eradicate(i);
                    continue;
                }

                buf[bytes] = '\0';
                string buffer(buf);

                cout << "Client: " << buffer;
                auto pos = buffer.find(':');
                if(buffer.substr(0, pos) == "Login")
                {
                    string name = buffer.substr(pos + 1,
                                                buffer.size() - pos);

                    Player *p;
                    try { p = &galaxy.newPlayer(name); }
                    catch(...)
                    {
                        table[i]->close();
                        select.eradicate(i);
                    } 

                    names[i] = name;

                    string planet = "Planet:" + to_string(p->world().x())
                                    + ":" + to_string(p->world().y()) + "\n";
                    table[i]->write(planet.c_str());

                }
                // End of client handler block
            }
        }
    }

    for(auto& client : table)
    {
        if(client.second > 0)
            client.second->close();
    }

    return 0;
}
コード例 #25
0
void FileTransferSocketThread::execute()
{
    if(info.hostType == eServer)
    {
        ServerSocket serverSocket;
        serverSocket.bind(this->info.serverPort);
        serverSocket.listen(1);
        Socket *clientSocket = serverSocket.accept();

        char data[513]="";
        memset(data, 0, 256);

        clientSocket->receive(data,256, true);
        if(*data == SEND_FILE)
        {
            FileInfo file;

            memcpy(&file, data+1, sizeof(file));

            *data=ACK;
            clientSocket->send(data,256);

            Checksum checksum;
            checksum.addFile(file.fileName);
            file.filecrc  = checksum.getSum();

            ifstream infile(file.fileName.c_str(), ios::in | ios::binary | ios::ate);
            if(infile.is_open() == true)
            {
                file.filesize = infile.tellg();
                infile.seekg (0, ios::beg);

                memset(data, 0, 256);
                *data=SEND_FILE;
                memcpy(data+1,&file,sizeof(file));

                clientSocket->send(data,256);
                clientSocket->receive(data,256, true);
                if(*data != ACK) {
                   //transfer error
                }

                int remain=file.filesize % 512 ;
                int packs=(file.filesize-remain)/512;

                while(packs--)
                {
                    infile.read(data,512);
                    //if(!ReadFile(file,data,512,&read,NULL))
                    //    ; //read error
                    //if(written!=pack)
                    //    ; //read error
                    clientSocket->send(data,512);
                    clientSocket->receive(data,256, true);
                    if(*data!=ACK) {
                           //transfer error
                    }
                }

                infile.read(data,remain);
                //if(!ReadFile(file,data,remain,&read,NULL))
                //   ; //read error
                //if(written!=pack)
                //   ; //read error

                clientSocket->send(data,remain);
                clientSocket->receive(data,256, true);
                if(*data!=ACK) {
                   //transfer error
                }

                infile.close();
            }
        }

        delete clientSocket;
    }
    else
    {
        Ip ip(this->info.serverIP);
        ClientSocket clientSocket;
        clientSocket.connect(this->info.serverIP, this->info.serverPort);

        if(clientSocket.isConnected() == true)
        {
            FileInfo file;
            file.fileName = this->info.fileName;
            //file.filesize =
            //file.filecrc  = this->info.

            string path = extractDirectoryPathFromFile(file.fileName);
            createDirectoryPaths(path);
            ofstream outFile(file.fileName.c_str(), ios_base::binary | ios_base::out);
            if(outFile.is_open() == true)
            {
                char data[513]="";
                memset(data, 0, 256);
                *data=SEND_FILE;
                memcpy(data+1,&file,sizeof(file));

                clientSocket.send(data,256);
                clientSocket.receive(data,256, true);
                if(*data!=ACK) {
                  //transfer error
                }

                clientSocket.receive(data,256,true);
                if(*data == SEND_FILE)
                {
                   memcpy(&file, data+1, sizeof(file));
                   *data=ACK;
                   clientSocket.send(data,256);

                   int remain = file.filesize % 512 ;
                   int packs  = (file.filesize-remain) / 512;

                   while(packs--)
                   {
                      clientSocket.receive(data,512,true);

                      outFile.write(data, 512);
                      if(outFile.bad())
                      {
                          //int ii = 0;
                      }
                      //if(!WriteFile(file,data,512,&written,NULL))
                      //   ; //write error
                      //if(written != pack)
                      //   ; //write error
                      *data=ACK;
                      clientSocket.send(data,256);
                    }
                    clientSocket.receive(data,remain,true);

                    outFile.write(data, remain);
                    if(outFile.bad())
                    {
                        //int ii = 0;
                    }

                    //if(!WriteFile(file,data,remain,&written,NULL))
                    //    ; //write error
                    //if(written!=pack)
                    //    ; //write error
                    *data=ACK;
                    clientSocket.send(data,256);

                    Checksum checksum;
                    checksum.addFile(file.fileName);
                    uint32 crc = checksum.getSum();
                    if(file.filecrc != crc)
                    {
                        //int ii = 0;
                    }

                    //if(calc_crc(file)!=info.crc)
                    //   ; //transfeer error
                }

                outFile.close();
            }
        }
    }
}
コード例 #26
0
ファイル: ServerMain.cpp プロジェクト: PratAm/Redis
int main ( int argc, char** argv )
{
	if(argc !=2)
		std::cout <<"Usage ./server <DbFilename>\n";

	FileStorage Db(static_cast<std::string>(argv[1]));

	// register the storage system
	database.registerStorage(&Db);

	// load the data from storage if any
	database.loadDataFromStorage();

	// register for signal handler
	registerSignal();

	try
	{
		std::cout << "Server starting on port 15000....\n";
		ServerSocket server ( 15000 );

		while ( true )
		{
			ServerSocket server_sock;
			server.accept ( server_sock );
			try
			{
				while ( true )
				{
					std::string input;
					server_sock >> input;

					std::string key,value;
					std::string result;

					// remove the last \r\n from input string
					input.erase(input.size()-2);

					// space for storing the tokens from input string
					std::vector<std::string> token;
					std::fill(token.begin(), token.end(), "");

					// Parse the input and tokenize it and store in vector for further use
					std::stringstream ss(input);
					std::string s;

					while (getline(ss, s, ' ')) {
						token.push_back(s);
					}

					// Parese rest of input based on first token {SET,GET,SAVE}  
					switch(hashit(token[0]))
					{
						case GET:
							if (2 != token.size())
								goto INVALID;

							key = token[1];
							result = database.get(key);

							// Return the result of GET query
							server_sock <<"$3\n";
							server_sock << result <<"\n";
							break;

						case SET:
							if (3 != token.size())
								goto INVALID;

							key = token[1];
							value = token[2];

							// Store the SET query in memory
							database.add(key,value);
							server_sock <<"+OK\n";

							break;

						case SAVE:
							if (1 != token.size())
								goto INVALID;
							database.persistData();
							server_sock <<"+OK\n";
							break;
INVALID:
						default:
							server_sock << "-INVALID\n";
							break;

					}
				}

			}
			catch ( SocketException& ) {}
		}
	}
	catch ( SocketException& e )
	{
		std::cout << "Exception was caught:" << e.description() << "\nExiting.\n";
	}


	return 0;
}
コード例 #27
0
ファイル: simple_server_main.cpp プロジェクト: egtoney/HackNC
int main ( int argc, int argv[] )
{

  LaserDriver LD;
  std::cout << "running....\n";

  try
    {
      // Create the socket
      ServerSocket server ( 30000 );

      vector< vector< int > > points;

      while ( true )
	{

	  ServerSocket new_sock;
	  server.accept ( new_sock );
         	 server.set_non_blocking( false );

	string buffer = "";

	  try
	    {
	      while ( true ){
	      	points.erase( points.begin(), points.begin()+points.size());
	                  cout << "here1" << endl;
	                  std::string line = "";
	                  //std::string buffer="";
		  int x, y;
		while( true ){
		  new_sock >> buffer;
		  stringstream bss;
		  bss << buffer;

		  int sentinel = 0;
		  int prev_numb = 0;
		  int number = 0;
		  bool first = true;
		  bool done = false;
		  while( bss >> sentinel ){
			bss >> number;
		  	if (sentinel < 0 || number < 0){
				done = true;
		  		break;
		  	}

		  	else{
		  		vector<int> pts;
		  		pts.push_back(sentinel);
		  		pts.push_back(number);
		  		points.push_back(pts);
		  	}
		  }
		  if( done )
			break;
		}



	                  // if( line.length() > 0 ){
	                  //     cout << "reading..." << endl;
	                  //     points.erase( points.begin(), points.begin()+points.size() );
	                  //     std::stringstream ss;
	                  //     ss << line;
	                  //     while(ss >> y >> x){
	                  //          std::vector<int> pt;
	                  //          pt.push_back(x);
	                  //          pt.push_back(y);
	                  //          points.push_back(pt);
	                           // std::cout << x << " " << y << std::endl;
			           // LD.lSet(x,y);
	                  //     }
	                  //     cout << "done..." << endl;
	                  // }
	                  //  cout << "here2" << endl;

	                  for( int i=0 ; i<points.size() ; i++ ){
	                      cout << points.size() << endl;
	                      LD.lSet(points[i][0],points[i][1]);
	                      //delayMicroseconds(500);
	                  }
			  // std::cout << data << std::endl;
			  // new_sock << data;
		}
	    }
	  catch ( SocketException& ) {}

	}
    }
  catch ( SocketException& e )
    {
      std::cout << "Exception was caught:" << e.description() << "\nExiting.\n";
    }

  return 0;
}
コード例 #28
0
ファイル: hermes.cpp プロジェクト: jjguti/hermes
int
#ifdef WIN32_SERVICE
hermes_main
#else
main
#endif //WIN32_SERVICE
(int argc,char *argv[])
{
  /* TODO:think of this again
  if(argc>2)
  {
    for(unsigned i=1;i<argc;i++)
    {
      argv++
  }
  */

  #ifdef HAVE_SSL
    CRYPTO_set_locking_callback(ssl_locking_function);
    #ifndef WIN32 //getpid() returns different values for threads on windows, therefor this is not needed
    CRYPTO_set_id_callback(pthread_self);
    #endif //WIN32
  #endif //HAVE_SSL
  try
  {
    if(2==argc)
    {
      if(!Utils::file_exists(argv[1]))
        throw Exception(string(_("Config file "))+argv[1]+_(" doesn't exist or is not readable."),__FILE__,__LINE__);
      cfg.parse(argv[1]);
    }
    else
      throw Exception(_("Config file not specified"), __FILE__, __LINE__);
    cfg.validateConfig();
  }
  catch(Exception &e)
  {
    LERR(e);
    return -1;
  }

  unsigned long nconns=0;

  signal(SIGTERM,exit_requested);
  signal(SIGINT,exit_requested);
  #ifndef WIN32
  signal(SIGCHLD,SIG_IGN);
  signal(SIGPIPE,SIG_IGN);
  #endif //WIN32

  //we have to create the server socket BEFORE chrooting, because if we don't,
  //SSL cannot initialize because it's missing libz
  ServerSocket server;
  pthread_t cleaner_thread;
  string peer_address;

  #ifndef WIN32
    if(cfg.getBackground())
    {
      int retval;

      retval=fork();
      if(retval>0)
        exit(0); //succesful fork

      if(retval<0)
      {
        LERR(_("Error forking into the background") + Utils::errnotostrerror(errno));
        return -1;
      }
    }
    
    if(cfg.getPidFile()!="")
    {
      try
      {
        Utils::write_pid(cfg.getPidFile(),getpid());
      }
      catch(Exception &e)
      {
        LERR(e);
      }
    }

    if(cfg.getChroot()!="")
    {
      //this is needed to get hermes to load the dns resolver BEFORE chrooting
      (void)gethostbyname("hermes-project.com");
      if(-1 == chdir(cfg.getChroot().c_str()))
      {
        LERR(_("Couldn't chdir into ") + cfg.getChroot() + " " + Utils::errnotostrerror(errno) );
        return -1;
      }
      if(-1==chroot(cfg.getChroot().c_str()))
      {
        LERR(_("Couldn't chroot ") + Utils::errnotostrerror(errno));
        return -1;
      }
      if(-1 == chdir("/"))
      {
        LERR(_("Couldn't chdir into /, this shouldn't happen: " + Utils::errnotostrerror(errno)) );
        return -1;
      }
    }
  #endif //WIN32

  LINF("Starting hermes with pid "+Utils::inttostr(getpid()));
  try
  {
    server.init();
    server.setPort(cfg.getListeningPort());
    server.listen(cfg.getListeningPort(),cfg.getBindTo());
  }
  catch(Exception &e)
  {
    LERR(e);
    return -1; //couldn't bind, exit
  }

  #ifndef WIN32
  if(cfg.getDropPrivileges())
  {
    //drop privileges once we have opened the listening port
    if(-1 == setgroups(0,NULL))
    {
      LERR(_("Error dropping priviledges " + Utils::errnotostrerror(errno)) );
      return -1;
    }
    if(-1 == setgid(cfg.getGid()))
    {
      LERR(_("Error setting gid " + Utils::inttostr(cfg.getGid()) + " " + Utils::errnotostrerror(errno)) );
      return -1;
    }
    if(-1 == setuid(cfg.getUid()))
    {
      LERR(_("Error setting uid " + Utils::inttostr(cfg.getUid()) + " " + Utils::errnotostrerror(errno)) );
      return -1;
    }
    if(-1 == setuid(cfg.getUid()))
    {
      LERR(_("Error setting uid " + Utils::inttostr(cfg.getUid()) + " " + Utils::errnotostrerror(errno)) );
      return -1;
    }
  }
  #endif //WIN32

  /* start our cleaner thread */
  if(cfg.getCleanDb())
    pthread_create(&cleaner_thread,NULL,cleaner_thread_run,NULL);

  new_conn_info info;
  stack<new_conn_info> info_stack;
  while(!quit)
  {
    if(server.canRead(1)) //wait one second for incoming connections, if none then loop again(allows us to check for SIGTERM and SIGINT)
    {
      pthread_t thread;
      pthread_attr_t thread_attr;
      pthread_attr_init(&thread_attr);
      pthread_attr_setdetachstate(&thread_attr, PTHREAD_CREATE_DETACHED);

      int retval;
      int fd=server.accept(&peer_address);
      info.new_fd=fd;
      info.peer_address=peer_address;
      info.connection_id=++nconns;
      pthread_mutex_lock(&info_stack_mutex);
      info_stack.push(info);
      pthread_mutex_unlock(&info_stack_mutex);
      retval=pthread_create(&thread,&thread_attr,thread_main,(void *)&info_stack);
      if(retval)
      {
        LERR(_("Error creating thread: ") + Utils::errnotostrerror(retval) + _(". Sleeping 5 seconds before continuing..."));
        sleep(5);
      }
      else
      {
        #ifdef WIN32
        LDEB("New thread created [" + Utils::ulongtostr(nconns) + "] thread_id: " + Utils::ulongtostr((unsigned long)thread.p) + ":" + Utils::ulongtostr(thread.x));
        #else
        LDEB("New thread created [" + Utils::ulongtostr(nconns) + "] thread_id: " + Utils::ulongtostr(thread));
        #endif //WIN32
        pthread_mutex_lock(&childrenlist_mutex);
        children.push_back(nconns);
        pthread_mutex_unlock(&childrenlist_mutex);
      }
    }
  }

  //close connection so that the port is no longer usable
  server.close();

  // wait for all threads to finish
  LINF("Waiting for threads to finish");
  #ifndef WIN32
  while(children.size())
  {
    if(false==cfg.getBackground())
    {
      cout << "Threads active:" << children.size() << (char)13;
      fflush(stdout);
    }
    sleep(1);
  }
  #endif //WIN32
  if(cfg.getCleanDb())
    pthread_join(cleaner_thread,NULL);

  #ifndef WIN32
  if(false==cfg.getBackground())
    cout << endl;
  #endif //WIN32

  #ifdef HAVE_SPF
  Spf::deinitialize();
  #endif //HAVE_SPF
  return 0;
}
コード例 #29
0
ファイル: nesServer.cpp プロジェクト: fregster/nes
int main ( int argc, char* argv[] )
{
	std::cout << "running....\n";

	try
	{
		// Create the socket
		ServerSocket server ( 30000 );

		while ( true )
		{

			ServerSocket varServerSocket;
			server.accept ( varServerSocket );

			try
			{
				while ( true )
				{
					bool varEncrypt (true);
					size_t varFound(0);
					std::string varScope;
					std::string varHash;
					std::string varSaltServer;
					std::string varSaltClient;
					std::string varPassword;
					std::string varData;
					std::string key;


					//Standard ensure the vars are clean
					varScope.clear();
					varHash.clear();
					varSaltClient.clear();
					varSaltServer.clear();
					varPassword.clear();
					varData.clear();
					key.clear();


					//Standard start buildup
					//Sent Salt1 which is used as part of the password hashing
					//-e-scope-hash-salt--input
					//sha256(salt+password+salt)

					//Generate and end the salt
					generateRandomString(varSaltServer, 24);
					varServerSocket << varSaltServer;


					//Get and then process Data
					varServerSocket >> varData;

					//log(varData);

					//Check if encrypting or decrypting
					if(varData.substr(0,2) == "-d" ) {
						varEncrypt = false;
					}
					varData.erase (0,int(varFound)+3);

					//Check scope (Key set)
					varFound = varData.find("-");
					if (varFound != std::string::npos) {
						varScope = varData.substr (0,int(varFound));
						varData.erase (0,int(varFound)+1);
					}

					//Get Hash and Salt to verify connection
					varFound = varData.find("-");
					if (varFound != std::string::npos) {
						varSaltClient = varData.substr (0,int(varFound));
						varData.erase (0,int(varFound)+1);
					}

					varFound = varData.find("-");
					if (varFound != std::string::npos) {
						varHash = varData.substr (0,int(varFound));
						varData.erase (0,int(varFound));
					}

					//Find termination string and drop everything before it
					varFound = varData.find("--");
					if (varFound != std::string::npos) {
						varData.erase (0,int(varFound)+2);
					}

					//Load the configurations for the scope
					varPassword = "******";

					//Verify the connection
					//std::string& varHash, std::string& varSaltServer, std::string& varSaltClient,  std::string& varPassword
					if(checkHash2Password(varHash, varSaltServer, varSaltClient, varPassword)) {
						if(varEncrypt){
							//Decrypt
							varServerSocket << encrypt(varData);
						} else {
							//Encrypt
							varServerSocket << decrypt(varData);
						}
					}

					//varServerSocket << "Scope: " << varScope << " - Hash: " << varHash << " - Sent: " <<  varSaltServer << " - Recieved: " <<  varSaltClient << " - Password: "******"Verification Failed" << "\n\n";
				}
			}
			catch ( SocketException& ) {}
		}
	}
	catch ( SocketException& e )
	{
		std::cout << "An exception was caught:" << e.description() << "\nExiting.\n";
	}

	return 0;
}