Opa…
Sobre o Map, pode ser um TreeMap, um LinkedHashMap ou simplesmente um HashMap, mas um HashMap ja resolve o seu problema.
Aogra sobre o server… da uma olhada nesse kra aqui…
http://java.sun.com/j2se/1.4.2/docs/api/java/net/ServerSocket.html
ai tem os metodos q vc consegue saber quem foi os kras q estao connectados e a porta deles… agoa sobre abrir um socket, vc n precisa nao, pois com o uso de sockets… tanto o cliente conversa com o server, qto o server conversar com o cliente pelo mesmo canal…
So relembrando um pouco como funciona o esqeuma de conexao…
O cliente se conecta no server atraves de uma PORTA e um IP especifice certo ?
Entao… o server pd tanto mandar qto receber msg com esse sockets, o q deve ser especificamente um byte[], e essa conversa acontece normalmente, mas o legal ai do que vc ta fazendo, vai ser gerenciar… o server pra ele mandar as msgs certas pra varios sockets…
Ou seja… no server… qdo um cliente novo se conecta ele cria um novo objeto Socket… entao vc pode gerencia no seu map, o IP + Socket. ok ?