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
package ConexionCliente; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.PrintWriter; import java.net.Socket; public class SocketCliente{ ///BufferedOutputStream bout = null; ///BufferedInputStream bin = null; boolean can = false; public SocketCliente(){ try{ } { e.printStackTrace(); } } try { if(sck != null) } { e.printStackTrace(); } } if(sck.isClosed()) { return ret; } try { String t; while((t = input.readLine()) != null){ ret += t; } //br.close(); input.close(); e.printStackTrace(); } finally{ return ret; } } try { if(sck.isClosed()) { return; } pw.print(str); pw.flush(); //output = new ObjectOutputStream(sck.getOutputStream()); //output.writeBytes(str); //output.flush(); //output.close(); // TODO Auto-generated catch block e.printStackTrace(); } finally{ } } public void Close(){ if(!sck.isClosed()) { try { sck.close(); // TODO Auto-generated catch block e.printStackTrace(); } } } }
este codigo es de Main
Código
public class Main { //try{ //Socket s = new Socket(InetAddress.getByName("stackoverflow.com"), 80); //PrintWriter pw = new PrintWriter(s.getOutputStream()); //pw.print("GET / HTTP/1.1\r\nHost: stackoverflow.com\r\n\r\n"); /// pw.print("Host: stackoverflow.com\r\n\r\n"); //pw.flush(); //BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream())); //String t; //while((t = br.readLine()) != null) System.out.println(t); //br.close(); //}catch(Exception e){ // e.printStackTrace(); //} String str; str = "GET / HTTP/1.1\r\nHost: google.com\r\n\r\n"; /// SocketCliente sck = new SocketCliente("google.com", 80); SocketCliente sck = new SocketCliente("localhost",4444); sck.Send(str); sck.Close();
ahora el codigo del servidor
Código
package Server; import java.io.BufferedInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.Reader; import java.io.Writer; import java.net.ServerSocket; import java.net.Socket; import java.util.Date; int puerto; ServerSocket ssock; Socket sock; boolean isrun = true; String server_id; String response; this.puerto = puerto; server_id = sid; try{ e.printStackTrace(); } } public void HandleRequest(){ try{ sock = ssock.accept(); StringBuilder request = new StringBuilder(2048); while (true) { int c = in.read(); if (c == '\r' || c == '\n' || c == -1) break; request.append((char) c); } out.write(now.toString() +"\r\n"); out.flush(); sock.close(); isrun = false; e.printStackTrace(); } } @Override public void run() { while(isrun){ HandleRequest(); } } }
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..