public ArrayList<NetworkMessage> receiveNetworkMessages()
	{
		//get network message:
		ArrayList<NetworkMessage> ret = new ArrayList<NetworkMessage>();
		
		//initialize receivedMessage when not done already:
		if ( receivedMessages.isEmpty() )
		{
			for ( int i=0; i<remoteClients.size(); ++i )
			{
				receivedMessages.add( null );
			}
		}
		
		for ( int i=0; i<receivedMessages.size(); ++i )
		{
			if ( !ignoreList.contains(i) )
			{ //only when this client is not already in the ignore-list:
				Future<Integer> receivedMessage = receivedMessages.get(i);
				
				if ( receivedMessage == null || receivedMessage.isDone() )
				{
					if ( receivedMessage != null )
					{
						try
						{
							int bytesRead = receivedMessage.get();
							String tmpMsg = new String(readBuffers.get(i).array()).substring( 0, bytesRead );
							readBuffers.get(i).clear();
							//System.out.println( "S: Received Message: " + tmpMsg );
							
							ret.add( new NetworkMessage(tmpMsg, null) );
						} catch (InterruptedException | ExecutionException e)
						{
							//ignore this (there are still other senders we want to receive from)...
							//e.printStackTrace(); //for debug purposes
							
							//ok this client is not reachable any longer:
							//so don't receive anything else
							ignoreList.add( i ); //now this client is on the ignore list
						}
					}
					
					if ( !ignoreList.contains(i) )
					{
						//replace the null or previous future-object with the new future-object which will wait for the next message:
						receivedMessages.set( i, remoteClients.get(i).read(readBuffers.get(i)) );
						//System.out.println( "S: Initiated waiting for new network messages..." );
					}
				}
			}
		}
		
		return ret;
	}