Foros del Web » Programación para mayores de 30 ;) » Java »

Sockets en Java

Estas en el tema de Sockets en Java en el foro de Java en Foros del Web. Hola a todos. Bueno el motivo de este post es que estoy haciendo una aplicación en java usando el protocolo TCP/IP, con el cual mi ...
  #1 (permalink)  
Antiguo 28/06/2011, 11:47
Avatar de Ferkhis  
Fecha de Ingreso: mayo-2011
Ubicación: Medellín
Mensajes: 52
Antigüedad: 12 años, 10 meses
Puntos: 2
Sockets en Java

Hola a todos.

Bueno el motivo de este post es que estoy haciendo una aplicación en java usando el protocolo TCP/IP, con el cual mi aplicación debe conectarse a una red que usa un protocolo establecido. Como sabemos ya, al generar la conexión se deben usar los metodos getOutpuStream() y getInputStream() para enviar y recibir información.
Yo habá trabajado antes con este protocolo y recuerdo que para lograr una conexión exitosa, el primer paquete que se debe enviar es uno que se comunique correctamente con el protocolo de esa red, sin embargo Java envía a esa red otro paquete antes de enviar el necesario para la conexión, conformado por los bytes:

AC ED 00 05

y el hecho de que el servidor reciba estos paquetes antes de recibir el que yo debo enviar para la conexión, causa un error de overflow inmediatamente.

Alguien sabe como puedo evitar que Java envíe ese paquete, para poder enviar el que yo necesito primero? Gracias!!!!
  #2 (permalink)  
Antiguo 28/06/2011, 13:55
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: Sockets en Java

Si usas la clase socket normal de java o serversocket y a ella le haces directamente el getOutputStream y no haces más cosas raras, java no envía nada por el socket.

Hay clases "raras" de java que sí lo hacen, como ObjectOutputStream, así que es cuestión de no usarlas. O bien si no usas esa clase ObjectOutputStream, pero usas el Serializable de java para intentar enviar un objeto java.

Coge el getOutputStream(), encapsúlalo si quieres en un DataOuptutStream y limítate a usar los métodos write de tipos primitivos (ojo con el String, que usa formato UTF y quizás no es el que admita el otro lado).

Código java:
Ver original
  1. OutputStream os = socket.getOutputStream();
  2. dos.writexx(xxx);


Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 28/06/2011, 14:05
Avatar de Ferkhis  
Fecha de Ingreso: mayo-2011
Ubicación: Medellín
Mensajes: 52
Antigüedad: 12 años, 10 meses
Puntos: 2
Respuesta: Sockets en Java

Cita:
Iniciado por chuidiang Ver Mensaje
Si usas la clase socket normal de java o serversocket y a ella le haces directamente el getOutputStream y no haces más cosas raras, java no envía nada por el socket.

Hay clases "raras" de java que sí lo hacen, como ObjectOutputStream, así que es cuestión de no usarlas. O bien si no usas esa clase ObjectOutputStream, pero usas el Serializable de java para intentar enviar un objeto java.

Coge el getOutputStream(), encapsúlalo si quieres en un DataOuptutStream y limítate a usar los métodos write de tipos primitivos (ojo con el String, que usa formato UTF y quizás no es el que admita el otro lado).

Código java:
Ver original
  1. OutputStream os = socket.getOutputStream();
  2. dos.writexx(xxx);


Se bueno.
Amigo muchas gracias por tu respuesta!!!!!!!!
  #4 (permalink)  
Antiguo 28/06/2011, 14:34
Avatar de Ferkhis  
Fecha de Ingreso: mayo-2011
Ubicación: Medellín
Mensajes: 52
Antigüedad: 12 años, 10 meses
Puntos: 2
Respuesta: Sockets en Java

Cita:
Iniciado por chuidiang Ver Mensaje
Si usas la clase socket normal de java o serversocket y a ella le haces directamente el getOutputStream y no haces más cosas raras, java no envía nada por el socket.

Hay clases "raras" de java que sí lo hacen, como ObjectOutputStream, así que es cuestión de no usarlas. O bien si no usas esa clase ObjectOutputStream, pero usas el Serializable de java para intentar enviar un objeto java.

Coge el getOutputStream(), encapsúlalo si quieres en un DataOuptutStream y limítate a usar los métodos write de tipos primitivos (ojo con el String, que usa formato UTF y quizás no es el que admita el otro lado).

Código java:
Ver original
  1. OutputStream os = socket.getOutputStream();
  2. dos.writexx(xxx);


Se bueno.

Oye pero me surgió otro problema... usando cualqueir método write, este me escribe los bytes del mensaje uno por uno en un paquete... no hay forma de escribir todo junto en un sólo paquete? Gracias!
  #5 (permalink)  
Antiguo 28/06/2011, 15:37
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: Sockets en Java

los métodos write permiten escribir primitivos (enteros, char o arrays de char, etc). No puedes escribir una estructura completa como harías en C++ por ejemplo. Lo más parecido y automático que hay es el ObjectStream, pero añade esa cabecera. También depende mucho de qué lenguaje tengas al otro lado y el micro, porque incluso al escribir un int (4 bytes) puedes tener problemas por el orden de esos bytes. Si al otro lado tienes un lenguaje no java, lo más seguro es escribir los bytes con este tipo de métodos write.

Se bueno.
__________________
Apuntes Java
Wiki de Programación

Etiquetas: ip, paquetes, sockets, tcp
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:30.