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.
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{
sck
= new Socket("localhost",
4444); }
{
e.printStackTrace();
}
}
public SocketCliente
(String host,
int port
){ try
{
sck
= new Socket( host , port
); if(sck != null)
System.
out.
println("Se Conecto con "+sck.
getInetAddress().
getHostAddress() ); }
{
e.printStackTrace();
}
System.
out.
println("SocketCliente"); }
System.
out.
println("receive");
if(sck.isClosed())
{
System.
out.
print("Socket is Close"); return ret;
}
try {
while((t = input.readLine()) != null){
ret += t;
}
//br.close();
input.close();
e.printStackTrace();
}
finally{
System.
out.
println("receive"); return ret;
}
}
System.
out.
printf("%s\n", str
); try {
if(sck.isClosed())
{
System.
out.
print("Socket is Close"); 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
public class Main {
public static void main
(String[] args
) {
//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();
//}
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
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;
public class Server
implements Runnable{
int puerto;
boolean isrun = true;
Server
(int puerto,
String sid
){ this.puerto = puerto;
server_id = sid;
try{
e.printStackTrace();
}
}
public void HandleRequest(){
System.
out.
println("manejando desde el Puerto "+ Integer.
toString(puerto
));
try{
sock = ssock.accept();
System.
out.
println("cliente Conectado desde la IP "+sock.
getRemoteSocketAddress());
StringBuilder request = new StringBuilder(2048);
while (true) {
int c = in.read();
if (c == '\r' || c == '\n' || c == -1) break;
request.append((char) c);
}
System.
out.
printf("%s", request.
toString());
out.write(now.toString() +"\r\n");
out.flush();
sock.close();
isrun = false;
System.
out.
println("Cliente desconectado");
e.printStackTrace();
}
}
@Override
public void run() {
while(isrun){
System.
out.
println("Esperando conexion...."); 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..