Tema: Socket's
Pregunta: como hago una conexion TCP ??
Respuesta: Una conexion TCP necesita establecer primeramente la conexion entre el
cliente y el servidor, donde el servidor estara corriendo y escuchando a un determinado puerto al que el cliente se conectara, cuando la conexion se establece correctamente entonces el cliente manda un mensage y el servidor le responde deacuerdo a lo que halla recibido, Este es un ejemplo muy simple de una coneccion TCP:
El Servidor:
Código PHP:
/*
* Author: Cryfel Villa
* Created: sábado, 17 de julio de 2004 6:26:35
* Modified: sábado, 17 de julio de 2004 6:26:35
*/
import java.net.ServerSocket;
import java.net.Socket;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.PrintWriter;
import java.io.BufferedOutputStream;
public class Servidor extends Thread
{
ServerSocket server;
public Servidor()
{
//MANDAMOS LLAMAR AL CONSTRUCTOR DE LA CLASE "Thread" QUIEN ES LA
//SUPERCLASE DE ESTA CLASE, ASI NOSOTROS CREAMOS LOS HILOS Y DEMAS COSAS
//LE MANDAMOS UN IDENTIFICADOR EN ESTE CASO "Servidor" PUEDE SER CUALQUIER COSA
super("Servidor");
try
{
//CREAMOS EL SOCKET DEL SERVIDOR
server=new ServerSocket(2002);
System.out.println("Servidor corriendo...");
}
catch(Exception e)
{
System.out.println("Error al correr el servidor\n"+e);
System.exit(1);
}
}
public void run()
{
Socket client=null;
while (true)
{
if (server==null)
return;
try
{
//ESPERA A QUE LLEGUE ALGO
client=server.accept();
System.out.println("Llegó un cliente!");
}
catch(Exception e)
{
System.out.println("No se pudo conectar con el cliente\n"+e);
System.exit(1);
}
try
{
InputStreamReader isr=new InputStreamReader(client.getInputStream());
BufferedReader is=new BufferedReader(isr);
PrintWriter os=new PrintWriter(new BufferedOutputStream(client.getOutputStream()),true);
String inStr;
//IMPRIMOMOS EL MENSAJE Y HACEMOS
// TODO LO QUE QUERRAMOS HACER CUANDO LLEGUE UNA PETICION
//EN ESTE CASO NADAMAS IMPRIMIMOS EL MENSAJE RECIVIDO
//EN LA CONSOLA PERO PUEDES HACER CUALQUIER OTRA COSA
while ((inStr=is.readLine())!=null)
{
System.out.println("Cliente: "+inStr);
os.println("Hey, cliente, mensaje recibido");
os.println("bye");
}
}
catch(Exception e)
{
System.out.println("Error: "+e);
}
}
}
public static void main(String a[])
{
Servidor servidor=new Servidor();
servidor.run();
}
}
Este es el Cliente
Código PHP:
/*
* Author: Crysfel Villa
* Created: sábado, 17 de julio de 2004 6:48:26
* Modified: sábado, 17 de julio de 2004 6:48:26
*/
import java.net.Socket;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.PrintWriter;
public class Cliente
{
public static void main(String a[])
{
Socket socket=null;
InputStreamReader isr=null;
BufferedReader in=null;
PrintWriter out=null;
try
{
socket=new Socket("192.168.0.1",2002);
isr=new InputStreamReader(socket.getInputStream());
in=new BufferedReader(isr);
out=new PrintWriter(socket.getOutputStream(),true);
}
catch(Exception e)
{
System.out.println("No se pudo crear la conexión\n"+e);
}
try
{
StringBuffer str=new StringBuffer(128);
String inStr;
int c;
out.println("Hey, server...");
socket.sendUrgentData(100);
while ((inStr=in.readLine())!=null)
{
System.out.println("Servidor: "+inStr);
if (inStr.equals("bye"))
break;
while ((c=System.in.read())!='\n')
str.append((char)c);
System.out.println("Cliente: "+str);
out.println(str.toString());
out.flush();
str.setLength(0);
}
out.close();
in.close();
socket.close();
}
catch(Exception e)
{
System.out.println("Error al enviar mensaje\n"+e);
}
}
}