Двухстороннее соединение с сокетом, поэтому вы можете читать и писать на одном соединении. Это похоже на подключение проводной вилки к розетке, отсюда и название розетки.
Вот как ты это делаешь
Socket socket = new Socket("10.0.0.1", 1234);
OutputStream os = socket.getOutputStream();
InputStream is socket.getInputStream();
new MyInputServiceThread(is).start();
теперь вы можете писать из os и читать из os. Вы можете сделать это в том же потоке или в разных потоках, если ожидаете, что они не будут синхронизированы.
На 2 вы можете иметь любое количество клиентов и серверных сокетов в одном приложении. По крайней мере, теоретически. Есть практические ограничения. Для серверных сокетов вы можете принять соединение, а затем создать поток, проходящий через открытый сокет, и тогда ваш серверный сокет должен быть готов принять больше соединений. Другими словами, чтобы разрешить несколько подключений к одному и тому же порту, убедитесь, что вы не блокируете после принятия подключения. Однако вы также можете открыть несколько сокетов сервера в нескольких потоках.
вот пример
ServerSocket server = new ServerSocket(1234);
while (true) {
Socket socket = server.accept();
// Once it spawns the thread that socket connection is serviced by
//the thread and the
//server socket is ready to accept new connections.
new Mythread(socket).start();
// above Mythread extends Thread....
}
Для приложения в качестве клиента нет ограничений. то есть столько, сколько вы хотите подключить.
На другой ноте ...
Для https вам также придется принимать сертификаты, что означает, что вам придется иметь дело с закрытыми открытыми ключами. Вы действительно хотите это сделать? как Tomcat и другие серверы приложений уже делают это. Если это будет веб-приложение, вам также следует подумать о правильно подписанном цифровом сертификате. Если в его интрасети браузеры использовали для доступа к нему, пришлось бы импортировать самогенерируемый самоподписанный сертификат.