Não precisa fecha-lo. Que tipo de Outputstream você está usando?
O único cuidado que vc tem que tomar é que o número de “writes” de um dos lados da conexão pode não ter absolutamente nada a ver com o número de “reads” que precisam ser feitos do outro lado.
Tentei com PrintWriter e também com BufferedWriter.
Mesmo acionando o flush(), a mensagem não é enviada, ou então talvez ela seja enviada, porem o cliente retorna falso, quando eu aciono o metodo .ready() do InputStreamReader tentando ler a mensagem.
A tansferência de mensagem só ocorre quando chamo o metodo close() no escritor , porém isto faz com que a conexão com o ServerSocket seja fechada.
Consegui resolver, o meu erro era que eu estava usando print para enviar a mensagem e ReadLine() para ler.
Entretanto o método ReadLine() define uma “linha lida” somente quando encontra um caractere especial de quebra de linha, ou seja um detalhe bobo que quase me frustrou
Escrevi com println() (que coloca a quebra no final \n) e problema, resolvido.
Aproveitando o tópico aberto:
Para conectar vários clientes na minha classe servidora, eu tenho que ir incrementando o numero da porta?
Consigo passar um objeto serializado pelo OutputStream??
O que é melhor em termos de performance, utilizar sockets ou usar RMI?
Sockets não são arquivos. Não use PrintWriter para escrever em Sockets.
Procure entender direito o que é um protocolo, como é organizado, e como transmitir dados de forma binária. Vai te evitar muita dor de cabeça, ao mesmo tempo que vai melhorar consideravelmente a qualidade da sua comunicação socket.
Outra grande fonte de dores de cabeça é o ObjectOutputStream/ObjectInputStream. Além de consumirem muita banda, eles são fontes fáceis de memory leaks.
ViniGodoy, você vem e joga um monte de coisas no ar rsrs
Esclarece aí por favor:
O que usar em vez de ObjectOutputStream? Porque eles são fontes fáceis de memory leaks?
Devo usar o que para trafegar os dados pelo socket? BufferedWriter?
O ObjectInputStream não deixa claro qual é o formato da serialização do objeto. Geralmente, ele serializa coisas demais, que vão deixar seu protocolo muito gorduroso. Eles também costumam a ser pouco eficientes.
Eu usaria o DataInputStream para escrever no Socket, ou então, a classe ByteBuffer e o pacote java.nio.
Agora, é importante entender como o TCP/IP funciona. Você nunca sabe quantos dados deve ler “do lado de lá”. Isso, quem deve indicar é o seu protocolo.