Foro de elhacker.net

Programación => Java => Mensaje iniciado por: danielo- en 29 Septiembre 2009, 18:55 pm



Título: Socket / cliente servidor
Publicado por: danielo- en 29 Septiembre 2009, 18:55 pm
Hola a toda la comunidad!!
de nuevo con una tarea!!! espero y puedan ayudarme

Necesito crear un programa en java usando sockets para lograr una conexion cliente-servidor entre dos maquinas.
Y también la forma detallada para hacerlo en ubuntu ...porfa!!! urge!!!

..e logrado hacer algo, pero la verdad es que no se si voy por buen camino, se logran intercambiar textos, pero solo sale en una computadora,
y se supone que debe salir conectado a una red... no se si sea ahi donde este fallando, por lo que tambien pido ayuda para crear una red inalambrica en ubuntu para que esto funcione, ayudenme porfavor!!! urge!!!

Les dejo mi codigo:

Este es para el cliente:

Código
  1. import java.io.*;
  2. import java.net.*;
  3. class Cliente{
  4.  
  5.  static final String HOST="localHost";//
  6.  static final int PUERTO=5000;
  7.  
  8. public Cliente(){
  9.  try{
  10.    Socket skCliente=new Socket(HOST, PUERTO);
  11.    DataInputStream flujo=new DataInputStream(skCliente.getInputStream());       DataOutputStream salida=new DataOutputStream(skCliente.getOutputStream());
  12.   System.out.println(flujo.readUTF());//se captura una cadena
  13.   salida.writeUTF("Cliente say: Hola");
  14.   skCliente.close();//cierre del Socket
  15.  
  16.    }catch(Exception e){
  17. System.out.println(e.getMessage());
  18.    }
  19.  
  20. }
  21.  
  22.  public static void main (String arg[]){
  23. new Cliente();
  24.  
  25. }
  26. }
  27.  
  28. ***************************++
  29.  
  30. Este es para el Servidor:
  31.  
  32. import java.io.*;
  33. import java.net.*;
  34. class Servidor{
  35.  
  36. static final int PUERTO=5000;
  37.  
  38. public Servidor(){
  39.      try{
  40.           ServerSocket skServidor=new ServerSocket(PUERTO);
  41.           System.out.println("Escucho el puntero "+PUERTO);
  42.           for(int numCliente=1;numCliente<=3;numCliente++){
  43.             Socket skCliente=skServidor.accept();
  44.             System.out.println("Sirvo al cliente "+numCliente);
  45.             OutputStream aux=skCliente.getOutputStream();
  46.             DataOutputStream flujo=new DataOutputStream(aux);
  47.             DataInputStream entrada=new DataInputStream(skCliente.getInputStream());
  48.             flujo.writeUTF("Servidor dece: Hola Cliente "+numCliente);
  49.             System.out.println(entrada.readUTF());
  50.             skCliente.close();
  51.             }
  52.             System.out.println("Demasiados Clientes");
  53.         }catch(Exception e){
  54.              System.out.println(e.getMessage());
  55.            }
  56.  
  57.    }
  58.   public static void main(String arg[]){
  59.      new Servidor();
  60.     }
  61. }
  62.  


Título: Re: Socket / cliente servidor
Publicado por: Casidiablo en 29 Septiembre 2009, 20:13 pm
La cosa es que el servidor está programado para solo recibir cosas, y el cliente solo para enviar. Ese código que te copiaste hace solo la mitad de lo que quieres.

Puedes probar alguno de los ejercicios del libro de deitel que tengo aquí, al menos para entender mejor:

http://casidiablo.net/java/
http://casidiablo.net/java-socket-chat-basico/

O un chat que hice hace años:

http://casidiablo.net/casidiablo-chat/

La idea es que debes tener un programa mejor estructurado, en el que se definan tanto las rutinas para enviar como las de recibir datos. Pero lo primordial es que entiendas lo que estás haciendo, porque copiar programas es muy sencillo (me encanta ver códigos agenos), pero entender es lo que prima... sino no podrás hacer mucho por tu cuenta.

Un saludo.


Título: Re: Socket / cliente servidor
Publicado por: Debci en 30 Septiembre 2009, 21:30 pm
La cosa es que tu pasas el stream del socket directamente a un Data Strea, y primero ha de pasar por el Stream sencillo es decir:
Código
  1. InputStream is = socket.getInputStrean
  2.  
A grandes rasgos esa es la idea.

Saludos


Título: Re: Socket / cliente servidor
Publicado por: _rez3t45_ en 2 Octubre 2009, 19:56 pm
holas
con lo poco que se de esto creo poderte ayudar... :rolleyes:
como dicen uestro compañero Casidiablo
escierto tu servidor solo recibe  mensajes y Debes implentarlo tambien para que pueda
enviar
entonces :

// en el Cliente-servidor    (envia y devuelve mensajes)

1.- create un Jframe de nombre FRM_servidor(cualquiera.. pero este uzo yo abajito)

//importas
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.ServerSocket;
import java.net.Socket;

// se implementa un hilo para queconstantemente este activo y no se sobrecarge
//nuestra aplicacion asi que le extendemos a nuestra clase del Jframe
//siempre va un procedimiento run - cuando se uza implements Runnable

public class Server extends javax.swing.JFrame implements Runnable {

//aca imprime los mensajes que le mana el cliente
 public void run(){
        try{
            ServerSocket serv = new ServerSocket(9090);
            while(true){
                Socket cli = serv.accept();
                DataInputStream flujo = new DataInputStream(cli.getInputStream());

                String men = flujo.readUTF();

                txt_conversa.append("\n"+ cli.getInetAddress() + " : " + men);

                cli.close();
            }

        }catch(Exception e){
            JOptionPane.showMessageDialog(null, e.getMessage());
        }
    }

// luego en nuestro constructor prendemos el hilo
public FRM_servidor() {
        initComponents();
        //declarando u hilo para llamarlo
        Thread hilo = new Thread(this);
        hilo.start();
        this.setSize(500,500);
    }

2.- creamos un boton que dice devolver menSaje y dentro de su evento ponemos

       //aka dvolvindo el mensaje
       //volviendo usuario servidor
            try{
            //ip Destino
           // String ip = "pones aka la ip destino mi ip  cliente "
            Socket cli = new Socket("200.60.136.56",9090);
               
                                 
            DataOutputStream flujo = new DataOutputStream(cli.getOutputStream());

            flujo.writeUTF(this.txt_responder.getText());

            txt_conversa.append("\n ♫ Anthony  ♫ ----> "+txt_responder.getText());
            cli.close();

        }catch(Exception e){
          JOptionPane.showMessageDialog(null, e.getMessage());
        }


// ********************* ahora el cliente
//este solo envia mensajes te faltaria .. implementar al form
// implements Runnable y crear el hilo

1.-creas otro Jframe (FRM_cliente  asi komo el mio)

//Instanciar los componentes
import java.net.*;  // prmite la net
import java.io.*;   // manejo de archivos
import javax.swing.JOptionPane;

2.- creas un boton que diga mandar mensaje

 try{
           // String ip = "pones aka la ip destino mi ip  server es 192.168.1.32   "
           //  Strin puerto = "el puerto de salida yo uzo el 9090"
            //ip Destino
            Socket cli = new Socket("192.168.1.32",9090);
                                                   
            DataOutputStream flujo = new DataOutputStream(cli.getOutputStream());

            flujo.writeUTF(txt_msg.getText());
            cli.close();

        }catch(Exception e){
          JOptionPane.showMessageDialog(null, e.getMessage());
        }


//  end

bueno de este metodo me permitio comunicarme atraves de una lan de mi univ,,,
bueno espero que te sirva mi ejemplo ..  :silbar:
pero aun soy muy novato .. pero cualquier cosa me dices para ver si te puedo ayudar u explicar

xau





Título: Re: Socket / cliente servidor
Publicado por: Debci en 2 Octubre 2009, 23:19 pm
holas
con lo poco que se de esto creo poderte ayudar... :rolleyes:
como dicen uestro compañero Casidiablo
escierto tu servidor solo recibe  mensajes y Debes implentarlo tambien para que pueda
enviar
entonces :

// en el Cliente-servidor    (envia y devuelve mensajes)

1.- create un Jframe de nombre FRM_servidor(cualquiera.. pero este uzo yo abajito)

//importas
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.ServerSocket;
import java.net.Socket;

// se implementa un hilo para queconstantemente este activo y no se sobrecarge
//nuestra aplicacion asi que le extendemos a nuestra clase del Jframe
//siempre va un procedimiento run - cuando se uza implements Runnable

public class Server extends javax.swing.JFrame implements Runnable {

//aca imprime los mensajes que le mana el cliente
 public void run(){
        try{
            ServerSocket serv = new ServerSocket(9090);
            while(true){
                Socket cli = serv.accept();
                DataInputStream flujo = new DataInputStream(cli.getInputStream());

                String men = flujo.readUTF();

                txt_conversa.append("\n"+ cli.getInetAddress() + " : " + men);

                cli.close();
            }

        }catch(Exception e){
            JOptionPane.showMessageDialog(null, e.getMessage());
        }
    }

// luego en nuestro constructor prendemos el hilo
public FRM_servidor() {
        initComponents();
        //declarando u hilo para llamarlo
        Thread hilo = new Thread(this);
        hilo.start();
        this.setSize(500,500);
    }

2.- creamos un boton que dice devolver menSaje y dentro de su evento ponemos

       //aka dvolvindo el mensaje
       //volviendo usuario servidor
            try{
            //ip Destino
           // String ip = "pones aka la ip destino mi ip  cliente "
            Socket cli = new Socket("200.60.136.56",9090);
               
                                 
            DataOutputStream flujo = new DataOutputStream(cli.getOutputStream());

            flujo.writeUTF(this.txt_responder.getText());

            txt_conversa.append("\n ♫ Anthony  ♫ ----> "+txt_responder.getText());
            cli.close();

        }catch(Exception e){
          JOptionPane.showMessageDialog(null, e.getMessage());
        }


// ********************* ahora el cliente
//este solo envia mensajes te faltaria .. implementar al form
// implements Runnable y crear el hilo

1.-creas otro Jframe (FRM_cliente  asi komo el mio)

//Instanciar los componentes
import java.net.*;  // prmite la net
import java.io.*;   // manejo de archivos
import javax.swing.JOptionPane;

2.- creas un boton que diga mandar mensaje

 try{
           // String ip = "pones aka la ip destino mi ip  server es 192.168.1.32   "
           //  Strin puerto = "el puerto de salida yo uzo el 9090"
            //ip Destino
            Socket cli = new Socket("192.168.1.32",9090);
                                                   
            DataOutputStream flujo = new DataOutputStream(cli.getOutputStream());

            flujo.writeUTF(txt_msg.getText());
            cli.close();

        }catch(Exception e){
          JOptionPane.showMessageDialog(null, e.getMessage());
        }


//  end

bueno de este metodo me permitio comunicarme atraves de una lan de mi univ,,,
bueno espero que te sirva mi ejemplo ..  :silbar:
pero aun soy muy novato .. pero cualquier cosa me dices para ver si te puedo ayudar u explicar

xau




además o es que tengo mal la vista o las horas altas de la noche, porque me parece ver que encapsula un inputstream aignandole el del cliente y luego no lo utiliza, me equivoco<?

Saludos