Lab. URL y sockets - Pagina del servidor yaqui

Anuncio
Lab. URL y sockets
Lectura del un URL
• Cuando se abre un URL con el método
openStream(), se crea un flujo (stream).
• La lectura de un URL entonces implica la
lectura de este stream.
Ejemplo
import java.net.*;
import java.io.*;
public class URLReader {
public static void main(String[] args) throws Exception {
URL yaqui = new URL("http://yaqui.mxl.uabc.mx/");
InputStreamReader lector = new
InputStreamReader(yaqui.openStream());
BufferedReader in = new BufferedReader(lector);
String inputLine;
while ((inputLine = in.readLine()) != null)
System.out.println(inputLine);
in.close();
}
}
Salida
public class Main {
public static void main(String[] args) {
URL yaqui;
try {
yaqui = new URL("http://yaqui.mxl.uabc.mx/");
JFrame f = new JFrame("Página Web");
final JEditorPane ep = new JEditorPane();
ep.setEditable(false);
try {
ep.setPage(yaqui);
} catch (IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
f.getContentPane().add(new JScrollPane(ep));
f.setSize(400, 300);
f.setVisible(true);
} catch (MalformedURLException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
} }
Ejemplo en un JEditorPane
Salida
Conexión a un URL
• Se establece una conexión a un URL con
openConnection().
• Este método regresa un URLConnection.
• Una conexión permite realizar operaciones
con la conexión tales como configuración,
lectura y escritura.
Lectura URL
• Esta clase está orientada a HTTP, lo cual
significa que muchos de sus métodos sólo se
aplican a conexiones HTTP.
Ejemplo.Lectura de un URL con
openConnection
public class URLConnectionReader {
public static void main(String[] args) throws Exception {
URL yaqui = new URL("http://yaqui.mxl.uabc.mx/");
URLConnection yc = yaqui.openConnection();
BufferedReader in = new BufferedReader(
new InputStreamReader(
yc.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null)
System.out.println(inputLine);
in.close();
}
}
Escritura en un URL
1.
2.
3.
4.
5.
Crear un URL.
Crear un URLConnection.
Configurar la conexión para salida (escritura).
Establecer una conexión al recurso.
Establecer un flujo de salida hacia la
conexión.
6. Escribir en el flujo.
7. Cerrar el flujo de salida.
Sockets
1. Abrir el socket.
2. Abrir un flujo de entrada y uno de salida al
socket.
3. Leer y escribir el flujo siguiendo el protocolo
del servidor.
4. Cerrar los flujos.
5. Cerrar el socket.
Ejemplo
Cliente
import java.io.*;
import java.net.*;
class Cliente {
static final String HOST = "localhost";
static final int PUERTO=5000;
public Cliente( ) {
try{
Socket skCliente = new Socket( HOST , PUERTO );
InputStream aux = skCliente.getInputStream();
DataInputStream flujo = new DataInputStream( aux
);
System.out.println( flujo.readUTF() );
skCliente.close();
} catch( Exception e ) {
System.out.println( e.getMessage() ); }
}
public static void main( String[] arg ) {
new Cliente();
}}
Servidor
import java.io.* ;
import java.net.* ;
class Servidor {
static final int PUERTO=5000;
public Servidor( ) {
try {
ServerSocket skServidor = new ServerSocket( PUERTO );
System.out.println("Escucho el puerto " + PUERTO );
for ( int numCli = 0; numCli < 3; numCli++ )
{
Socket skCliente = skServidor.accept(); // Crea objeto
System.out.println("Sirvo al cliente " + numCli);
OutputStream aux = skCliente.getOutputStream();
DataOutputStream flujo= new DataOutputStream( aux );
flujo.writeUTF( "Hola cliente " + numCli );
skCliente.close();
}
System.out.println("Demasiados clientes por hoy");
} catch( Exception e ) {
System.out.println( e.getMessage() ); }
}
public static void main( String[] arg ) {
new Servidor();
} }
Ejemplo 2. EchoCliente
import java.io.*;
import java.net.*;
public class EchoClient {
public static void main(String[] args) throws
IOException {
Socket echoSocket = null;
PrintWriter out = null;
BufferedReader in = null;
try {
echoSocket = new Socket("localhost", 9999);
out = new
PrintWriter(echoSocket.getOutputStream(),
true);
in = new BufferedReader(new
InputStreamReader(
echoSocket.getInputStream()));
} catch (UnknownHostException e) {
System.err.println("No conosco al servidor
"+echoSocket.getLocalSocketAddress());
System.exit(1);
}
catch (IOException e) {
System.err.println("nopuedo conectarme para
I/O “ + "el error: "+e.getMessage());
System.exit(1);
}
BufferedReader stdIn = new BufferedReader(
new
InputStreamReader(System.in));
String userInput;
while ((userInput = stdIn.readLine()) != null) {
out.println(userInput);
System.out.println("ecooooo: " +
in.readLine());
}
out.close();
in.close();
stdIn.close();
echoSocket.close();
}
}
Ejemplo 2.ServerEcho
w.println("Bienvenido al Servidor de ECOOOO
import java.io.*;
Teclea 'bye' para cerrar.");
import java.net.*;
String line;
public class EchoServer
do
{
private ServerSocket server;
{ line = r.readLine();
public EchoServer(int portnum){
if ( line != null )
w.println("lei: "+ line);
try{
}
server = new ServerSocket(portnum); }
while ( !line.trim().equals("bye") );
catch (Exception err)
client.close();
{System.out.println(err);}
}
}
}
public void serve(){
catch (Exception err)
try { while (true) {
{System.err.println(err);}
Socket client = server.accept();
}
BufferedReader r = new BufferedReader (
public static void main(String[] args)
new InputStreamReader(client.getInputStream()));
{
PrintWriter w = new
EchoServer s = new EchoServer(9999);
PrintWriter(client.getOutputStream(), true);
s.serve();
}
}
Ejemplo Datagramas
public class EnviaDatagrama {
public static void main(String[] args) {
try {
InetAddress receiverHost = InetAddress.getByName("localhost");
int receiverPort = 9999;//Integer.parseInt(9999);
String message = "Hola Maisha“;
// instantiates a datagram socket for sending the data
DatagramSocket mySocket = new DatagramSocket();
byte[ ] buffer = message.getBytes( );
DatagramPacket datagram =
new DatagramPacket(buffer, buffer.length,
receiverHost, receiverPort);
mySocket.send(datagram);
mySocket.close( );
} // end try
catch (Exception ex) { ex.printStackTrace( ); }
} // end main
}
Ejemplo Datagramas
public class ReceptorDatagrama {
public static void main(String[] args) {
int port = 9999;//Integer.parseInt(args[0]);
final int MAX_LEN = 10;
// This is the assumed maximum byte length of the datagram to be received.
try {
DatagramSocket mySocket = new DatagramSocket(port);
// instantiates a datagram socket for receiving the data
byte[ ] buffer = new byte[MAX_LEN];
DatagramPacket datagram = new DatagramPacket(buffer, MAX_LEN);
mySocket.receive(datagram);
String message = new String(buffer);
System.out.println(message);
mySocket.close( );
} // end try
catch (Exception ex) {
ex.printStackTrace( );
}
} // end main
} // end class
• Investigar como utilizando hilos el servidor
puede atender a más de un cliente.
• Modificar la clase ServerEcho para que
funcione con múltiples clientes.
• Modificar la clase ReceptorDatagrama para
que funcione con múltiples clientes
Descargar