Diferencia entre Socket y SocketFactory
Cual es la diferencia entre las clases Socket y SocketFactory?
La primera está dentro de Java.net y la segunda en Javax.net.
Está lo mismo para ServerSocket y ServerSocketFactory, pero me imagino que la diferencia será analoga, no?
Gracias
La primera está dentro de Java.net y la segunda en Javax.net.
Está lo mismo para ServerSocket y ServerSocketFactory, pero me imagino que la diferencia será analoga, no?
Gracias
Hola:
Un Socket es un Socket y hace lo que se supone que hace.
Un SocketFactory es una clase que te permite obtener Sockets. La gracia es que el Socket que te devuelve no tiene porque ser necesariamente una clase Socket. Puede ser cualquier clase hija de Socket. Por ejemplo, la clase SSLSocketFactory hereda de SocketFactory y tiene el método createSocket() igual. Si llamas a este método te devuelve un Socket que en realidad es un SSLSocket que es un socket que transmite la información con el protocolo de seguridad SSL.
Si utilizas todo esto adecuadamente, puedes hacer un código que no sepa en realidad que tipo de Socket esta usando (normal o SSL), ya que lo obtiene a través de una factoria que alguien le pasa y no hace directamente los new de Socket ni de SSLSocket. Por ejemplo
public void miMetodo (SocketFactory factoria)
{
Socket s = factoria.createSocket(...);
....
}
Si lo llamas asi
miMetodo (SocketFactory.getDefault());
usas sockets normales y si lo llamas asi
miMetodo (SSLSocketFactory.getDefault());
estás usando sockets SSL, pero el código que hay dentro de miMetodo() no sabe nada del tipo de socket que está usando.
Si buscas en google "patron factoria" podrás encontrar información que te aclare este concepto de forma más genérica y detallada.
Se bueno.
Un Socket es un Socket y hace lo que se supone que hace.
Un SocketFactory es una clase que te permite obtener Sockets. La gracia es que el Socket que te devuelve no tiene porque ser necesariamente una clase Socket. Puede ser cualquier clase hija de Socket. Por ejemplo, la clase SSLSocketFactory hereda de SocketFactory y tiene el método createSocket() igual. Si llamas a este método te devuelve un Socket que en realidad es un SSLSocket que es un socket que transmite la información con el protocolo de seguridad SSL.
Si utilizas todo esto adecuadamente, puedes hacer un código que no sepa en realidad que tipo de Socket esta usando (normal o SSL), ya que lo obtiene a través de una factoria que alguien le pasa y no hace directamente los new de Socket ni de SSLSocket. Por ejemplo
public void miMetodo (SocketFactory factoria)
{
Socket s = factoria.createSocket(...);
....
}
Si lo llamas asi
miMetodo (SocketFactory.getDefault());
usas sockets normales y si lo llamas asi
miMetodo (SSLSocketFactory.getDefault());
estás usando sockets SSL, pero el código que hay dentro de miMetodo() no sabe nada del tipo de socket que está usando.
Si buscas en google "patron factoria" podrás encontrar información que te aclare este concepto de forma más genérica y detallada.
Se bueno.