Underc0de

Foros Generales => Dudas y pedidos generales => Mensaje iniciado por: algorf en Febrero 26, 2014, 06:34:15 PM

Título: [SOLUCIONADO] Chat Problemas con los Stream.
Publicado por: algorf en Febrero 26, 2014, 06:34:15 PM
Como va la gente del foro, Desde ya un saludo para todos.
Vengo de beraza a manguearles una manito. Estoy programando un chat, como se puede leer, y estoy medio trabado, en un par de cuestiones. que creo que son de concepto, o inexperiencia.

Bueno les comento, hasta ahora hice el servidor y el cliente, a lo que quiero llegar es a conectar varios clientes al servidor y que se comuniquen entre ellos por medio del servidor algo muy complicado para mi al menos, hay algunos conceptos que no los tengo bien en claro por eso venia a pedirles una mano, no que me lo programen y me lo manden sino que me explique algunas dudas. Ya que copiarlo no me sirve.

todavia me faltan programar partes. la de  cerrar conexciones. y la de envios de datos del servidor a todos los usuarios conectados. no comprendo como hacer eso.. creo que tengo que usar hilos y cada hilo generado en el servidor.. para cada socket conectado..  y cada hilo guardarlo en una matriz.. para saber a donde enviarlo..  creo que tengo que ir por ese paso..

CLIENTE
Código (java) [Seleccionar]
import java.io.*;
import java.net.*;
import java.util.Scanner;

public class meloCliente {

    String ip = "127.0.0.1",usuario, mensajeDis, mensajeDos;
    int port = 6666;
    Socket tcp;
    Scanner sc;
    boolean flag =true;

   
    public void llamEsqueletor() {
       
    }
   
    public void closePort() {
       
    }
    public void getDatain() throws IOException{
            DataInputStream dis = new DataInputStream(tcp.getInputStream());
            mensajeDis = dis.readUTF();
            System.out.println("Msj << "+ mensajeDis);
           
    }
    public void setDataOutPack() throws IOException {
        DataOutputStream dos = new DataOutputStream(tcp.getOutputStream());
        System.out.print(" >> ");
        mensajeDos = this.crateMsj();
        String packet = this.usuario + "-" + mensajeDos;
        dos.writeUTF(packet);
        // falta enviarlo...
       
    }
    public String crateMsj(){
        sc = new Scanner(System.in);
        String teclado = sc.nextLine();     
        return teclado;
    }

    public void openConex() throws SocketException, IOException{
        tcp = new Socket(ip, port);
        if(tcp.isConnected()){System.out.println("Cliente <<"+ usuario +">> conectado al Servidor.");}
    }
    public static void main(String[] args) throws IOException, SocketException{
        meloCliente mC = new meloCliente();
       
        mC.LeyendaUsr();
        mC.openConex();
       
        while(mC.flag){
            mC.setDataOutPack();
        }
       
    }
    public void LeyendaUsr() {
        sc = new Scanner(System.in);

        System.out.println("        ·~ Cliente Mensajeria. v0.1 "+ "\n");
        System.out.println("# Apodo de red: \n");
        usuario = sc.nextLine();
    }
}


SERVIDOR

Código (java) [Seleccionar]
import java.net.*;
import java.io.*;
import javax.swing.JOptionPane;
import java.util.Scanner;

public class Serv{
   
    ServerSocket ss;
    Socket s ;
    JOptionPane panelDat;
    boolean flag = true;
    Scanner sc;
    int cont =0;
           
    public void openPort() throws IOException{
        System.out.println("# Abriendo puertos.");
        ss = new ServerSocket(6666);
    }
    public void aceptCli() throws IOException{
            System.out.println("# Esperando solicitud de cliente...");
            s = ss.accept();
            cont++;
            System.out.println("# Cliente conectado. Datos." + s.getInetAddress()+"-"+ s.getPort()+ " Cliente Nro:" + cont);
    }
    public void sendPack() throws IOException{
        DataOutputStream dos = new DataOutputStream(s.getOutputStream());
    }   
   
    public void getDatain() throws IOException{
        DataInputStream dis = new DataInputStream(s.getInputStream());
        String mensajeDis = dis.readUTF();
        System.out.println(mensajeDis);
       
    }
    public void closePort() {
       
    }
    public static void main(String[] args)throws IOException {
        Serv sev = new Serv();
        sev.leyenda();
        sev.openPort();
       
        sev.aceptCli();
        while(sev.flag){
        sev.getDatain();
        }
       
        System.out.println("·~ Servidor");
    }
        public void leyenda() {
        System.out.println("      ·~ Servidor Mensajeria v0.1." + "\n");

    }
}


Espero puedan ayudarme.
Desde ya un saludo grande. y seguiré investigando.
Título: Re:[Ayuda] Chat Problemas con los Stream.
Publicado por: algorf en Febrero 27, 2014, 10:46:54 PM
bueno como veo que no pasa nada trate de continuarlo.. modifique el codigo.. agregandole una clase mas al package del servidor.. para hacer un hilo para cada conexcion. pero creo q no lo estoy aplicando bien.. voy a seguir leyendo de hilos.. y vectores.. sinome equivoco deberia usar vectores para guardar objetos.. q serian las conexciones..

aca dejo el codigo espero me puedan ayudar me salta un error.. :S

Código (java) [Seleccionar]
package meloServ;

/**
*
* @author Chilon
*/
import java.io.*;
import java.util.Scanner;
import java.net.Socket;

public class Conexcciones extends Thread {
   
    Serv ss = new Serv() ;
    Socket s = new Socket();
   
    public Conexcciones() throws IOException{
            System.out.println("# Esperando solicitud de cliente...");
            s = ss.ss.accept();
            System.out.println("# Cliente conectado. Datos." + s.getInetAddress()+"-"+ s.getPort());
    }
   
}


el servidor solo se modifica el  aceptarcliente que lo puse asi

Código (java) [Seleccionar]
    public void aceptCli()throws IOException{

            Conexcciones con =new Conexcciones();
            con.run();
       
    }


pero me da un error.. :S cuando llega al aceptar cliente del hilo conexciones.. :S

Exception in thread "main" java.lang.NullPointerException
   at meloServ.Conexcciones.<init>(Conexcciones.java:24)
   at meloServ.Serv.aceptCli(Serv.java:34)
   at meloServ.Serv.main(Serv.java:55)
Java Result: 1

espero me puedan ayudar un saludo grande !