Foro de elhacker.net

Programación => Java => Mensaje iniciado por: HackerJack en 3 Septiembre 2011, 23:52 pm



Título: Como usar Socket en java..!!
Publicado por: HackerJack en 3 Septiembre 2011, 23:52 pm
hola..!! yo soy nuevo en esta pagina web,
tengo una duda sobre java, necesito saber como se utilizan los socket par enviarse informacion entre dos aplicaciones..???? me gustaria que me dieran una idea graxias de antemano..................
 ::)   :silbar:  ;-)  :laugh:


Título: Re: Como usar Socket en java..!!
Publicado por: klaine en 4 Septiembre 2011, 00:29 am
El servidor debe instanciar la clase java.net.ServerSocket con el puerto a conectar, de esta instancia obtienes un objeto java.net.Socket con el método accept(), al momento que alguien se conecte,  con el método getOutputStream del Socket obtienes un objeto java.io.ObjectOutputStream, con el cual puedes usar el método writeObject para escribir objectos que recibirá el cliente.

El cliente debe instanciar Socket, deberá recibir como primer argumento la ip del servidor y como segundo argumento el puerto por donde se realizará la conexion, (debe ser el mismo que usa el server)

Para ambos sockets con los método getOutputStream y getInputStream se recibe un objeto ObjectOutputStream y ObjectInputStream respectivamente.

Te dejo un programa ejemplo que se conecta a tu propio pc:

Main: (primero lo ejecutas como server, para esto llamas al metodo s(), luego para instanciar cliente el main llama a c())

Código
  1. package sockets;
  2.  
  3. import java.net.ServerSocket;
  4. import java.net.Socket;
  5. import java.io.*;
  6. import javax.swing.*;
  7.  
  8. public class Main {
  9.  
  10.    public static void main(String[] args) {
  11.  
  12.  
  13.        s(); // la segunda vez que lo ejecutas llama a c();
  14.  
  15.  
  16.    }
  17.  
  18.    static void s(){
  19.  
  20.        Server s=new Server();
  21.  
  22.    }
  23.  
  24.    static void c(){
  25.  
  26.        Client c=new Client();
  27.  
  28.    }
  29.  
  30. }
  31.  
  32.  

Server:

Código
  1.  
  2. package sockets;
  3.  
  4. import java.net.ServerSocket;
  5. import java.net.Socket;
  6. import java.io.*;
  7. import javax.swing.JOptionPane;
  8.  
  9. public class Server {
  10.  
  11.    ServerSocket ss;
  12.    Socket s;
  13.  
  14.    Server(){
  15.  
  16.        try {
  17.            ss = new ServerSocket(9999);
  18.  
  19.                        s = ss.accept();
  20.  
  21.                        oos=new ObjectOutputStream(s.getOutputStream());
  22.  
  23.                        oos.writeObject("Hello Socket");
  24.  
  25.        } catch (IOException ex) {
  26.  
  27.            close();
  28.  
  29.        }
  30.  
  31.        close();
  32.  
  33.    }
  34.  
  35.    void close(){
  36.        try {
  37.            s.close();
  38.            ss.close();
  39.        } catch (IOException ex) {
  40.  
  41.        }
  42.  
  43.    }
  44.  
  45.    void read(){
  46.  
  47.                            try{
  48.  
  49.        ois=new ObjectInputStream(s.getInputStream());
  50.  
  51.                    String str=(String) ois.readObject();
  52.  
  53.                    JOptionPane.showMessageDialog(null, str2, "Server dice:", JOptionPane.INFORMATION_MESSAGE);
  54.  
  55.                    Thread.sleep(15);
  56.  
  57.                    }catch(Exception e){
  58. e.printStackTrace();
  59.                }
  60.  
  61.            }
  62.  
  63.    }
  64.  
  65.  

Cliente:

Código
  1.  
  2. package sockets;
  3.  
  4. import java.net.ServerSocket;
  5. import java.net.Socket;
  6. import java.io.*;
  7. import java.util.Scanner;
  8. import javax.swing.*;
  9.  
  10. public class Client {
  11.  
  12.    Socket s;
  13.  
  14.    Client(){
  15.  
  16.        try{
  17.  
  18.         s=new Socket("localhost", 9999);
  19.  
  20.        ois=new ObjectInputStream(s.getInputStream());
  21.  
  22.        String str2=(String) ois.readObject();
  23.  
  24.        JOptionPane.showMessageDialog(null, str2);
  25.  
  26.        }catch(IOException ioex){
  27.  
  28.        }catch(ClassNotFoundException ex){
  29.  
  30.        }
  31.  
  32.  
  33.  
  34.  
  35.  
  36.    }
  37.  
  38. }
  39.  
  40.  
  41.  

(Funcionará siempre y cuando no tengas el puerto 9999 ocupado  :xD )

Saludos!


Título: Re: Como usar Socket en java..!!
Publicado por: l2ch en 9 Febrero 2012, 22:16 pm
una pregunta, ya realizado la conexión del cliente y el servidor, hay alguna manera de que el cliente pueda acceder a los metodos del servidor. o solamente el cliente realiza peticiones mediante flujo de datos?????


Título: Re: Como usar Socket en java..!!
Publicado por: Proteus1989 en 10 Febrero 2012, 17:15 pm
una pregunta, ya realizado la conexión del cliente y el servidor, hay alguna manera de que el cliente pueda acceder a los metodos del servidor. o solamente el cliente realiza peticiones mediante flujo de datos?????

Exacto, tu solo le envías información que el servidor interpreta y después de interpretarla te contesta.


Título: Re: Como usar Socket en java..!!
Publicado por: Proteus1989 en 11 Febrero 2012, 00:24 am
klaine he usado tu código para pruebas y me ha surgido una duda.
¿Qué ocurriría si entran varios clientes a la vez?

Lo he solucionado con un while(socket.getKeepAlive()); pero no se si es lo más eficiente.


Título: Re: Como usar Socket en java..!!
Publicado por: Cherry2612 en 18 Julio 2012, 19:25 pm
Hola, me parece muy interezante tu código, lo que quice hacer funcionar pero me marca una serie de errores de los cuales no se corregir. Espero me puedas ayudar.
En tu código de Server en la siguiente linea de código no reconoce str2 porque??

JOptionPane.showMessageDialog(null, str2, "Server dice:", JOptionPane.INFORMATION_MESSAGE);

ademas cuando lo quiero ejecutar me marca lo siguiente

Exception in thread "main" java.lang.NullPointerException
   at sockets.Server.close(Server.java:40)
   at sockets.Server.<init>(Server.java:30)
   at sockets.Main.s(Main.java:20)
   at sockets.Main.main(Main.java:13)


Título: Re: Como usar Socket en java..!!
Publicado por: reylagarto19 en 1 Agosto 2012, 13:12 pm
una pregunta, ya realizado la conexión del cliente y el servidor, hay alguna manera de que el cliente pueda acceder a los metodos del servidor. o solamente el cliente realiza peticiones mediante flujo de datos?????

aunque ya hace tiempo de este de post, si es cierto que se puede acceder a metodos de uno en otro....

para eso necesitas hecharle un ojo a la libreria CORBA, o montarte un ORB (lo cual me parece muy tedioso...), o si no quieres un ORB, puedes hacerlo de manera mas amigable con un RMI, y te ahorras hacer el Skeleton los proxys.... etc etc...