elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Consulta sobre Socket.....
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Consulta sobre Socket.....  (Leído 2,362 veces)
bash

Desconectado Desconectado

Mensajes: 258



Ver Perfil
Consulta sobre Socket.....
« en: 29 Julio 2016, 20:00 pm »

Saludos En general!


Disculpen la molestia , tengo una duda sobre la conexion con Socket en java, es posible que alguien me muestre un ejemplo en java donde pueda hacer una conexion , a una url o IP  con un puerto especifico  solo enviar un buffer y luego esperar un respuesta immediata, si parece una pregunta de alguien que esta haciendo una tarea pero no la verdad programo en c / c++ tengo un poquito de experiencia en socket. en c es sencillo
si eres un cliente creas el socket, haces un connect, si conecta haces un send y receive y luego un close , pero en java es bien diferente y me gustaria ver como podria aprender eso
si es posible , gracias de antemano.


postdata : Disculpe por no poner titulo.


« Última modificación: 29 Julio 2016, 20:44 pm por bash » En línea

gracias por responder mis dudas
engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Consulta
« Respuesta #1 en: 29 Julio 2016, 20:06 pm »

los titulos de los temas deben ser descriptivos de la tematica discutida


En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
Once

Desconectado Desconectado

Mensajes: 120


Ver Perfil WWW
Re: Consulta sobre Socket.....
« Respuesta #2 en: 29 Julio 2016, 23:05 pm »

Hola, en java es exactamente igual, solo cambian las librerias:

1) Creas el socket indicando al constructor la dirección y el puerto al cual te quieres conectar

Código
  1. Sockect cliente = new Socket("direccion", puerto)

2) Envias datos con el método send() y recibes con read(), readLine()

3) Cierras la conexión con el método close()

No sé como sea en C/C++ pero en Java debes tener cuidado, porque los sockets se leen como si fueran archivos, así que para leer y escribir debes usar los objetos (InputStream y OutputStream respectivamente) que te devuelve los métodos getInputStream() y getOutputStream(). Objetos que luego puedes envolver en otros objetos un poco más convenientes para lo que quieres leer (depronto acá es donde, al principio, las cosas se ponen un poco confusas). Solo recuerda que en Java los sockets se leen como si fueran archivos de texto y hay mucha documentación al respecto.

Acá un ejemplo que tengo de cuando comencé con los Sockets en Java:

Código
  1. import java.io.BufferedWriter;
  2. import java.io.BufferedReader;
  3. import java.io.InputStreamReader;
  4. import java.io.OutputStreamWriter;
  5. import java.io.IOException;
  6. import java.net.Socket;
  7. import java.net.UnknownHostException;
  8.  
  9. /**
  10.  *
  11.  * @author once
  12.  */
  13. public class Enviar {
  14.    private String host;
  15.    private int port;
  16.    private String peticion;
  17.    private Socket web;
  18.    private BufferedReader entrada;
  19.    private BufferedWriter salida;
  20.  
  21.    public Enviar(String host, int port, String peticion) {
  22.        this.host = host;
  23.        this.port = port;
  24.        this.peticion = peticion;
  25.  
  26.        System.err.printf("Host: %s", host);
  27.    }
  28.  
  29.    public String enviar() {
  30.        String data;
  31.        String buffer = "";
  32.        int b = 0;
  33.        try {
  34.            web = new Socket(host, port);
  35.            entrada = new BufferedReader(new InputStreamReader(web.getInputStream()));
  36.            salida = new BufferedWriter(new OutputStreamWriter(web.getOutputStream()));
  37.  
  38.            System.out.println("enviando: " + peticion);
  39.  
  40.            // Envia la informacion
  41.            salida.write(peticion);
  42.            salida.flush();
  43.  
  44.            int bytes = 0;
  45.  
  46.            // Lee la informacion
  47.            while((bytes = entrada.read()) > 0) {
  48.                buffer += (char)bytes;
  49.            }
  50.  
  51.            System.err.println("Terminado de leer la petición longitud: " + buffer.length());
  52.  
  53.            // Cerramos los flujos
  54.            entrada.close();
  55.            salida.close();
  56.            web.close();
  57.  
  58.            System.out.println("Recibido del servidor: " + buffer);
  59.            return buffer;
  60.  
  61.  
  62.        } catch (UnknownHostException e) {
  63.            System.err.println("No se encontro el host");
  64.            e.printStackTrace();
  65.        } catch (IOException e) {
  66.            System.err.println("Error entrada salida");
  67.            e.printStackTrace();
  68.        }
  69.        return "";
  70.    }
  71. }
  72.  

Saludos!
En línea

bash

Desconectado Desconectado

Mensajes: 258



Ver Perfil
Re: Consulta sobre Socket.....
« Respuesta #3 en: 2 Agosto 2016, 16:59 pm »

Muchas Gracias !!

Bien ya que me puede conectar desde escritorio
estoy probando ahra desde android  quisiera sus comment para ver si puedo arreglarle
el codigo no es mio para nada he hecho copias de varias url para obterner algo que funcione me gustaria saber su opinion.

Código
  1.  
  2.  
  3. import java.io.ByteArrayOutputStream;
  4. import java.io.IOException;
  5. import java.io.InputStream;
  6. import java.io.InputStreamReader;
  7. import java.io.OutputStreamWriter;
  8. import java.net.Socket;
  9. import java.net.UnknownHostException;
  10. import java.io.InputStream;
  11. import java.io.OutputStream;
  12. import android.os.AsyncTask;
  13. import java.io.BufferedWriter;
  14. import java.io.BufferedReader;
  15. /**
  16.  * Created by aperez on 8/2/2016.
  17.     usando codigo de este sitio : http://android-er.blogspot.com/2014/02/android-  sercerclient-example-client.html
  18.   Ayuda de : Once ,  del el hacker.net url del tema :http://foro.elhacker.net/java/consulta_sobre_socket-t455790.0.html
  19.  
  20.  
  21.  */
  22. public class NetworkWrapper
  23. {
  24.    String url;
  25.    int port;
  26.    String SendBuffer;
  27.  
  28.  
  29.    OutputStream outputStream;
  30.    InputStream inputStream;
  31.    Socket socket;
  32.    String Result;
  33.  
  34.    NetworkWrapper(String sendbuffer, String Url, int port)
  35.    {
  36.        this.url = Url;
  37.        this.port = port;
  38.        this.SendBuffer = sendbuffer;
  39.    }
  40.  
  41.  
  42.  
  43.   public String SendAndRecevied()
  44.   {
  45.       String ret ="";
  46.       MyClientTask myClientTask = new MyClientTask(  this.SendBuffer,  this.url,  this.port);
  47.       myClientTask.execute();
  48.       ret.concat(Result);
  49.       return ret;
  50.   }
  51.  
  52.  
  53.  
  54.  
  55.  
  56.    public class MyClientTask extends AsyncTask<Void, Void, Void> {
  57.  
  58.        String dstAddress;
  59.        int dstPort;
  60.  
  61.        String sed;
  62.  
  63.  
  64.        public MyClientTask(String sn, String addr, int port){
  65.            dstAddress = addr;
  66.            sed = sn;
  67.            dstPort = port;
  68.  
  69.        }
  70.  
  71.        @Override
  72.        protected Void doInBackground(Void... arg0) {
  73.  
  74.            try {
  75.                socket = new Socket(dstAddress, dstPort);
  76.                byte[] buffer = new byte[1024];
  77.                outputStream = socket.getOutputStream();
  78.                inputStream = socket.getInputStream();
  79.  
  80.                BufferedReader entrada = new BufferedReader(new InputStreamReader(inputStream));
  81.                BufferedWriter  salida = new BufferedWriter(new OutputStreamWriter(outputStream));
  82.  
  83.  
  84.                salida.write(sed);
  85.                salida.flush();
  86.                int b;
  87.                while((b = entrada.read())!= -1)
  88.                {
  89.                    Result +=(char) b;
  90.                }
  91.  
  92.                entrada.close();
  93.                salida.close();
  94.                socket.close();
  95.                socket = null;
  96.            } catch (UnknownHostException e) {
  97.                // TODO Auto-generated catch block
  98.                e.printStackTrace();
  99.                Result = "UnknownHostException: " + e.toString();
  100.            } catch (IOException e) {
  101.                // TODO Auto-generated catch block
  102.                e.printStackTrace();
  103.                Result = "IOException: " + e.toString();
  104.            }finally{
  105.                if(socket != null){
  106.                    try {
  107.                        socket.close();
  108.                    } catch (IOException e) {
  109.                        // TODO Auto-generated catch block
  110.                        e.printStackTrace();
  111.                    }
  112.                }
  113.            }
  114.            return null;
  115.        }
  116.  
  117.        @Override
  118.        protected void onPostExecute(Void result) {
  119.            super.onPostExecute(result);
  120.        }
  121.  
  122.    }
  123. }
  124.  
En línea

gracias por responder mis dudas
Once

Desconectado Desconectado

Mensajes: 120


Ver Perfil WWW
Re: Consulta sobre Socket.....
« Respuesta #4 en: 3 Agosto 2016, 03:41 am »

No tengo experiencia en Android, yo creo que sería mejor crear un nuevo hilo para que más gente lo vea y te conteste alguien con más experiencia

Saludos!
En línea

bash

Desconectado Desconectado

Mensajes: 258



Ver Perfil
Re: Consulta sobre Socket.....
« Respuesta #5 en: 3 Agosto 2016, 04:14 am »

correcto debo usar un hilo nuevo, para eso estoy usando AsyncTask que es una clase abtracta disenada para operaciones cortas que requieran usar paralelismo o multiprocesamiento (eso creo) en Desktop el codigo que me diste va excelente ahora vere como lo pongo a correr en android luego lo subire aqui o pondre en git seguro que otra persona lo necesitara algun dia. :D  :laugh: :laugh: ;-)
En línea

gracias por responder mis dudas
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines