Enviar Strings e objetos( como ArrayList por exemplo) por Socket

Praticamente nenhum stream é.

Ele só quer dizer que duas threads não podem acessar o mesmo stream ao mesmo tempo. Mas cada cliente terá seu próprio stream, então, não há acesso multi-thread sobre o stream em si.[/quote]

Então acho que não tem problema porque o que vai acontecer é uma thread acessar o DataInputStream para escutar e outra o DataOutputStream para escrever. Obrigado pela ajuda. Vou tentar colocar aqui mais ou menos como eu estou pensando no protocolo inicialmente.

Poderia também mandar apenas xml, contendo um nó inicial que corresponderia ao código do que está sendo transmitido. Lido esse código passar o xml para o método correspondente para fazer o parse correto, do tipo mensagem simples, ou converter tudo para um arraylist de objetos.