A socket connection is two way so you can read and write on one connection. Its similar to connecting a wire plug in socket hence the name socket.
Heres how you do it
Socket socket = new Socket("10.0.0.1", 1234);
OutputStream os = socket.getOutputStream();
InputStream is socket.getInputStream();
new MyInputServiceThread(is).start();
now you can write from os and read from os. You can do it on same thread or on different threads if you expect them not to be in sync.
On 2 you can have any number of clients and server sockets in one app. At least theoritically. There are practical limits. For server sockets you can accept a connection and then spawn a thread passing on the open socket and then your server socket should be ready to accept more connections. In other words to allow multiple connections on the same port you should ensure you do not block after accepting a connection. However you can open more than one server sockets as well in multiple threads.
heres an example
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....
}
For app as client there is no limit. i.e. as many as you want to connect.
On another note...
For https you would also have to accept certificates which means you will have to deal with Private Public keys. Do you really want to do that? as tomcat and other app servers already do that. If this is going to be a web app you would also need to think about a properly signed digital cert. If its intranet then browsers used to access it would have to import a self generated self signed certificate.