Olá galera,
tenho que implementar um projeto de pseudo twitter, e um dos requisitos é do servidor enviar mensagem para todos os clientes.
O problema que estou tendo é que o servidor só envia mensagem para o primeiro cliente que for executado. Quando executo o 2º cliente, em outra console ou outro host ele não recebe as mensagens, apenas o 1º que conectou que recebe.
Então abaixo seguem os códigos até o momento.
Alguém sabe aonde tá o problema?
E outra coisa, já tentei colocar o ServerSocket e o acept pra aceitar conexões no main, tirando do método enviarMensagemParaTodosSeguidores(). Só que quando executo dá NullPointerException. Aí por isso que por enquanto tá fora do main, pq desse jeito tá rodando.
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
/**
*
* @author andersonribeiro
*/
public class Servidor {
private static int porta = 5000;
private static String nomeServidor = "SERVIDOR SOCKET";
public String getNomeServidor() {
return nomeServidor;
}
public void setNomeServidor(String nomeServidor) {
Servidor.nomeServidor = nomeServidor;
}
public static int getPorta() {
return porta;
}
public static void setPorta(int porta) {
Servidor.porta = porta;
}
//MÉTODO PARA O SERVIDOR ENVIAR MENSAGEM PARA TODOS OS SEGUIDORES
public void enviarMensagemParaTodosSeguidores() {
try {
ServerSocket s = new ServerSocket(porta);
Servidor servidor = new Servidor();
System.out.println("Olá: " + servidor.getNomeServidor() + "\nConectado na porta: " + Servidor.getPorta());
String str;
Socket c = s.accept();
while (true) {
DataInputStream entrada = new DataInputStream(c.getInputStream());
DataOutputStream saida = new DataOutputStream(c.getOutputStream());
do {
System.out.print("Enviar mensagem aos seguidores > ");
byte[] line = new byte[100];
System.in.read(line);
System.out.print(servidor.getNomeServidor() + " twittou > ");
saida.write(line);
entrada.read(line);
str = new String(line);
System.out.println(str.trim());
} while (!str.trim().equals("quit"));
c.close();
System.out.println("\nServidor desconectado!");
}
} catch (Exception e) {
System.out.println(e);
}
}
public static void main(String[] args) {
new Servidor().enviarMensagemParaTodosSeguidores();
}
}
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.Socket;
/**
*
* @author andersonribeiro
*/
public class Cliente {
private static int porta = 5000;
private static String IP = "127.0.0.1";
private static String nomeSeguidor;
public static int getPorta() {
return porta;
}
public static void setPorta(int porta) {
Cliente.porta = porta;
}
public static String getIP() {
return IP;
}
public static void setIP(String IP) {
Cliente.IP = IP;
}
public static String getNomeSeguidor() {
return nomeSeguidor;
}
public static void setNomeSeguidor(String nomeSeguidor) {
Cliente.nomeSeguidor = nomeSeguidor;
}
//MÉTODO QUE RECEBE MENSAGEM DO SERVIDOR
public void receberMensagemDoServidor() {
try {
Socket s = new Socket(IP, porta);
System.out.println("Cliente conectado!");
DataInputStream i1 = new DataInputStream(s.getInputStream());
DataOutputStream o1 = new DataOutputStream(s.getOutputStream());
String str;
do {
byte[] line = new byte[100];
i1.read(line);
o1.write(line);
str = new String(line);
System.out.print("Servidor twittou: ");
System.out.println(str.trim());
} while (!str.trim().equals("quit"));
s.close();
System.out.println("\nServidor desconectado!");
} catch (Exception e) {
System.out.println(e);
}
}
public static void main(String[] args) {
new Cliente().receberMensagemDoServidor();
}
}