I was tempted to make this all one class, but getDefaultPort is awkward