Foro de elhacker.net

Programación => Java => Mensaje iniciado por: bash en 1 Enero 2017, 21:47 pm



Título: socket, serversocket, interoperacion con otros lenguaje.
Publicado por: bash en 1 Enero 2017, 21:47 pm
   Buenas a tod@s feliz inicio de año nuevo...
   bien, tengo una duda estoy tratando de crear un aplicacion te tipo webserver/server
   usando socket , serversocket, solamente por que quiero aprender y tambien quisiera saber si
   este servidor puede interactuar con aplicaciones escritas en otros lenguajes (c++, c.. obvio que si)
   quisiera entender por pasos y no soy nuevo en java pero para esta aplicacion mis conocimientos de socket
   son limitados , quisiera entender, quisiera que me recomendaran algun libro y link donde pueda leer
   acerca de este tema.
   
   
   pero como quiera les quiero mostrar algo sencillo , que quizas todos los que saben de      estetema en el foro saben.




Código
  1. package ConexionCliente;
  2.  
  3. import java.io.BufferedInputStream;
  4. import java.io.BufferedOutputStream;
  5. import java.io.BufferedReader;
  6. import java.io.DataInputStream;
  7. import java.io.DataOutputStream;
  8. import java.io.IOException;
  9. import java.io.InputStreamReader;
  10. import java.io.ObjectInputStream;
  11. import java.io.ObjectOutputStream;
  12. import java.io.PrintWriter;
  13. import java.net.Socket;
  14.  
  15. public class SocketCliente{
  16.  
  17. ///BufferedOutputStream bout = null;
  18. ///BufferedInputStream  bin  = null;
  19. ObjectOutputStream output = null;
  20. ObjectInputStream  input  = null;
  21. Socket               sck  = null;
  22. boolean              can  = false;
  23.  
  24.  
  25. public SocketCliente(){
  26. try{
  27. sck = new Socket("localhost", 4444);
  28. }
  29. catch(Exception e)
  30. {
  31.   e.printStackTrace();
  32. }
  33. }
  34.  
  35.  
  36.  
  37.  
  38.  
  39. public SocketCliente(String host, int port){
  40. try
  41. {
  42. sck = new Socket( host , port);
  43.    if(sck != null)
  44.     System.out.println("Se Conecto con "+sck.getInetAddress().getHostAddress() );
  45. }
  46. catch(Exception e)
  47. {
  48.   e.printStackTrace();
  49. }
  50. System.out.println("SocketCliente");
  51. }
  52.  
  53.  
  54. public String receive(){
  55. System.out.println("receive");
  56. String ret= null;
  57.  
  58. if(sck.isClosed())
  59. {
  60.    System.out.print("Socket is Close");
  61.    return ret;
  62. }
  63.  
  64. try {
  65. BufferedReader br = new BufferedReader(new InputStreamReader(sck.getInputStream()));
  66.  
  67. String t;
  68. while((t = input.readLine()) != null){
  69. ret += t;
  70. System.out.println(t);
  71. }
  72. //br.close();
  73. input.close();
  74.  
  75. } catch (IOException e) {
  76. e.printStackTrace();
  77. }
  78. finally{
  79. System.out.println("receive");
  80. return ret;
  81. }
  82. }
  83.  
  84.  
  85. public void Send(String str){
  86.  
  87. System.out.printf("%s\n", str);
  88. try {
  89.  
  90.  
  91. if(sck.isClosed())
  92. {
  93.    System.out.print("Socket is Close");
  94.    return;
  95. }
  96.    PrintWriter pw = new PrintWriter(sck.getOutputStream());
  97.        pw.print(str);
  98.     pw.flush();
  99. //output = new ObjectOutputStream(sck.getOutputStream());
  100. //output.writeBytes(str);
  101.    //output.flush();
  102.    //output.close();
  103. } catch (IOException e) {
  104. // TODO Auto-generated catch block
  105. e.printStackTrace();
  106. }
  107. finally{
  108. System.out.println("Send");
  109. }
  110. }
  111.  
  112. public void Close(){
  113. if(!sck.isClosed())
  114. {
  115.   try {
  116. sck.close();
  117. } catch (IOException e) {
  118. // TODO Auto-generated catch block
  119. e.printStackTrace();
  120. }
  121. }
  122. }
  123.  
  124. }

este codigo es de Main
Código
  1. public class Main {
  2.  
  3. public static void main(String[] args) {
  4.  
  5. //try{
  6. //Socket s = new Socket(InetAddress.getByName("stackoverflow.com"), 80);
  7. //PrintWriter pw = new PrintWriter(s.getOutputStream());
  8.    //pw.print("GET / HTTP/1.1\r\nHost: stackoverflow.com\r\n\r\n");
  9.   /// pw.print("Host: stackoverflow.com\r\n\r\n");
  10. //pw.flush();
  11. //BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
  12. //String t;
  13. //while((t = br.readLine()) != null) System.out.println(t);
  14. //br.close();
  15. //}catch(Exception e){
  16.    // e.printStackTrace();
  17. //}
  18.   String str;
  19.   str = "GET / HTTP/1.1\r\nHost: google.com\r\n\r\n";
  20.  /// SocketCliente sck = new SocketCliente("google.com", 80);
  21.   SocketCliente sck = new SocketCliente("localhost",4444);
  22.   sck.Send(str);
  23.   String res  = sck.receive();
  24.   System.out.println(res);
  25.   sck.Close();
  26.  
  27.  




ahora el codigo del servidor


Código
  1.  
  2. package Server;
  3.  
  4. import java.io.BufferedInputStream;
  5. import java.io.IOException;
  6. import java.io.InputStream;
  7. import java.io.InputStreamReader;
  8. import java.io.OutputStreamWriter;
  9. import java.io.Reader;
  10. import java.io.Writer;
  11. import java.net.ServerSocket;
  12. import java.net.Socket;
  13. import java.util.Date;
  14.  
  15. public class Server implements Runnable{
  16.  
  17. int          puerto;
  18. ServerSocket ssock;
  19. Socket        sock;
  20. boolean        isrun = true;
  21. String         server_id;
  22. String         response;
  23.  
  24.  
  25. Server(int puerto, String sid){
  26. this.puerto = puerto;
  27. server_id = sid;
  28.    try{
  29. ssock = new ServerSocket(puerto);
  30.    }catch(IOException e){
  31.     e.printStackTrace();
  32.    }
  33. }
  34.  
  35. public void HandleRequest(){
  36.  
  37. System.out.println("manejando desde el Puerto "+ Integer.toString(puerto));
  38.  
  39.  try{
  40. sock = ssock.accept();
  41. System.out.println("cliente Conectado desde la IP "+sock.getRemoteSocketAddress());
  42.  
  43. Reader in = new InputStreamReader(new BufferedInputStream(sock.getInputStream()));
  44.  
  45. StringBuilder request = new StringBuilder(2048);
  46. while (true) {
  47. int c = in.read();
  48. if (c == '\r' || c == '\n' || c == -1) break;
  49. request.append((char) c);
  50. }
  51.  
  52. System.out.printf("%s", request.toString());
  53.  
  54. Writer out = new OutputStreamWriter(sock.getOutputStream());
  55. Date now = new Date();
  56. out.write(now.toString() +"\r\n");
  57. out.flush();
  58. sock.close();
  59. isrun = false;
  60.        System.out.println("Cliente desconectado");
  61.  
  62.  }catch(IOException e){
  63.  e.printStackTrace();
  64.  }
  65.  
  66.  
  67. }
  68.  
  69.  
  70.  
  71.  
  72.  
  73.  
  74.  
  75. @Override
  76. public void run() {
  77. while(isrun){
  78. System.out.println("Esperando conexion....");
  79. HandleRequest();
  80. }
  81.  
  82. }
  83.  
  84.  
  85.  
  86.  
  87.  
  88.  
  89. }
  90.  
  91.  
  92.  



Bueno cada vez que trato de interactuar el servirdor lee solo hasta \n \t el reader no me permite leer una linea completa se queda colgado, me gustaria que me ayudaran por favor post-data la informacion que me respoda no importa esta parte se puede obviar. gracias de antemano por los consejos..