Hola a todos!!!
Mi proyecto de hacer una chat cada vez le salen mas cosas, actualmente la conversacion cliente servidor se lleva a cabo exitosamente, un servidor es capaz de atender a a varios clientes a la vez y responder a cada uno de ellos separadamente, sin embargo ahora estoy en la tarea de enviar la respuesta de una de la conversaciones a todos los clientes que se encuentran conectados, en otras palabras usando un objeto de la clase PrintWriter quiero enviar el mismo string a todos los hilos existentes en un instante de tiempo, leyendo el API existen metodos que me permiten deterinar cuantos hilos se encuentran activos, el grupo al que pertenecen y de hecho existen metodos para manejar al tiempo todos los hilos que esten activos, pero no encuentro la manera de usar mi propio metodo para enviar una respuesta a todos los hilos (clientes) que se encuentren activos..
Podira alguien indicarme como hacerlo o darme una idea, pense en hacer un metodo el cual recibiera el string que se quiere enviar a todos los clientes y por medio de un objeto de la clase PrintWriter enviarlo a todos los hilos activos, pero no funciono la respuesta es enviada solo a un hilo.
Dejo parte de mi programa
public class MyGUIServer extends JFrame {
/**
*
*/
private static final long serialVersionUID = 1L;
static final int PUERTO = 5000;
private static ServerSocket skServidor;
private Socket skCliente;
private JTextArea TextServer = new JTextArea();
private JTextArea TextClient = new JTextArea();
public static void main(String[] arg) throws IOException {
new MyGUIServer();
}
public MyGUIServer() throws IOException {
setSize(500, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("MY SERVER");
setVisible(true);
getContentPane().setLayout(new GridLayout(2, 1));
JScrollPane jScrollPane1 = new JScrollPane(TextServer);
JScrollPane jScrollPane2 = new JScrollPane(TextClient);
jScrollPane1.setBorder(new TitledBorder("Server"));
jScrollPane2.setBorder(new TitledBorder("Client"));
getContentPane().add(jScrollPane1, BorderLayout.CENTER);
getContentPane().add(jScrollPane2, BorderLayout.CENTER);
TextServer.setWrapStyleWord(true);
TextServer.setLineWrap(true);
TextClient.setWrapStyleWord(true);
TextClient.setLineWrap(true);
try
{
skServidor = new ServerSocket( PUERTO );
}
catch (IOException ioEx)
{
TextServer.append("\nUnable to set up port!");
System.exit(1);
}
int x=1;
do {
skCliente = skServidor.accept(); // Crea objeto
TextServer.append("Sirvo al Cliente" + x + "\n");
new ReceiveServer(skCliente).start();
x++;
}
while (true);
}
class ReceiveServer extends Thread {
private Socket skCliente;
private Scanner input;
private PrintWriter output;
public ReceiveServer(Socket socket)
{
skCliente = socket;
try
{
input= new Scanner(skCliente.getInputStream());
output = new PrintWriter(skCliente.getOutputStream(), true);
}
catch(IOException ioEx)
{
ioEx.printStackTrace();
}
}
public void run()
{
String message;
int x = 1;
do {
// Step 3: Set up input and output streams
// Step 4: Receive and send data
message = input.nextLine();
TextClient.append(message + "\n");
RespondAll (output, message);
x++;
} while (!message.equals("STOP"));
// Step 5: Close socket
try {
skCliente.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
private void RespondAll(PrintWriter output2, String message) {
final PrintWriter output=output2;
output.println(message);
}
}
Gracias a todos!!!!!!!!!!!!!!!!!
Mi proyecto de hacer una chat cada vez le salen mas cosas, actualmente la conversacion cliente servidor se lleva a cabo exitosamente, un servidor es capaz de atender a a varios clientes a la vez y responder a cada uno de ellos separadamente, sin embargo ahora estoy en la tarea de enviar la respuesta de una de la conversaciones a todos los clientes que se encuentran conectados, en otras palabras usando un objeto de la clase PrintWriter quiero enviar el mismo string a todos los hilos existentes en un instante de tiempo, leyendo el API existen metodos que me permiten deterinar cuantos hilos se encuentran activos, el grupo al que pertenecen y de hecho existen metodos para manejar al tiempo todos los hilos que esten activos, pero no encuentro la manera de usar mi propio metodo para enviar una respuesta a todos los hilos (clientes) que se encuentren activos..
Podira alguien indicarme como hacerlo o darme una idea, pense en hacer un metodo el cual recibiera el string que se quiere enviar a todos los clientes y por medio de un objeto de la clase PrintWriter enviarlo a todos los hilos activos, pero no funciono la respuesta es enviada solo a un hilo.
Dejo parte de mi programa
public class MyGUIServer extends JFrame {
/**
*
*/
private static final long serialVersionUID = 1L;
static final int PUERTO = 5000;
private static ServerSocket skServidor;
private Socket skCliente;
private JTextArea TextServer = new JTextArea();
private JTextArea TextClient = new JTextArea();
public static void main(String[] arg) throws IOException {
new MyGUIServer();
}
public MyGUIServer() throws IOException {
setSize(500, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("MY SERVER");
setVisible(true);
getContentPane().setLayout(new GridLayout(2, 1));
JScrollPane jScrollPane1 = new JScrollPane(TextServer);
JScrollPane jScrollPane2 = new JScrollPane(TextClient);
jScrollPane1.setBorder(new TitledBorder("Server"));
jScrollPane2.setBorder(new TitledBorder("Client"));
getContentPane().add(jScrollPane1, BorderLayout.CENTER);
getContentPane().add(jScrollPane2, BorderLayout.CENTER);
TextServer.setWrapStyleWord(true);
TextServer.setLineWrap(true);
TextClient.setWrapStyleWord(true);
TextClient.setLineWrap(true);
try
{
skServidor = new ServerSocket( PUERTO );
}
catch (IOException ioEx)
{
TextServer.append("\nUnable to set up port!");
System.exit(1);
}
int x=1;
do {
skCliente = skServidor.accept(); // Crea objeto
TextServer.append("Sirvo al Cliente" + x + "\n");
new ReceiveServer(skCliente).start();
x++;
}
while (true);
}
class ReceiveServer extends Thread {
private Socket skCliente;
private Scanner input;
private PrintWriter output;
public ReceiveServer(Socket socket)
{
skCliente = socket;
try
{
input= new Scanner(skCliente.getInputStream());
output = new PrintWriter(skCliente.getOutputStream(), true);
}
catch(IOException ioEx)
{
ioEx.printStackTrace();
}
}
public void run()
{
String message;
int x = 1;
do {
// Step 3: Set up input and output streams
// Step 4: Receive and send data
message = input.nextLine();
TextClient.append(message + "\n");
RespondAll (output, message);
x++;
} while (!message.equals("STOP"));
// Step 5: Close socket
try {
skCliente.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
private void RespondAll(PrintWriter output2, String message) {
final PrintWriter output=output2;
output.println(message);
}
}
Gracias a todos!!!!!!!!!!!!!!!!!