[SOLUCIONADO] Chat Problemas con los Stream.

Iniciado por algorf, Febrero 26, 2014, 06:34:15 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Febrero 26, 2014, 06:34:15 PM Ultima modificación: Julio 02, 2014, 05:40:46 AM por blackdrake
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
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
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.

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
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
    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 !