Uso de apis en java
-
Upload
andres-alejandro-figueroa -
Category
Documents
-
view
2.242 -
download
0
description
Transcript of Uso de apis en java
INSTITUTO TECNOLÓGICO DE CANCÚN
INGENIERÍA MECATRÓNICA
MATERIA:
PROGRAMACIÓN BÁSICA
INVESTIGACIÓN:
USO DE APIS EN JAVA
DE PUERTO (JAVA COM)
MULTIMEDIA (JAVA FRAMEWORKS)
SOCKET ()
PROFESORA:
MARÍA JACINTA MARTÍNEZ CASTILLO
AUTORES:
ALEJANDRO FIGUEROA ANDRÉS ALFONSO
CUA MAY JOEL DE LA CRUZ
MARTINEZ SOLIS ITZEL
CANCÚN QUINTANA ROO A 18 DE JUNIO DEL 2012
1
USO DE APIS EN JAVA
MÉTODO LENGTH DE LA CLASE STRING DEL API DE JAVA. EJEMPLO DE USO DE MÉTODOS PARA EVITAR ERRORES.
Vamos a usar el método length de la clase String para tratar de evitar que nos salten errores al emplear el método substring. Lo primero que haremos será consultar la documentación de la clase, la signatura del método, y, si es necesario, su detalle. La signatura del método es:
int length() Devuelve el número de caracteres del String.
El tipo devuelto por el método es int (un entero) y el método no requiere parámetros para ser ejecutado. El método no está sobrecargado, ya que hay una única manera de invocarlo. Un ejemplo de invocación puede ser NumCaracteres = micadena.length();. Recordar que siempre que invoquemos un método hemos de incluir los paréntesis, independientemente de que sea necesario pasar parámetros o no.
Valiéndonos de este método, intenta escribir tu propio código para hacer lo siguiente:
a) Reescribir la clase Combinador que usamos anteriormente de forma que el método combinacion devuelva “No aporta cadenas válidas” si se le pasa como parámetro alguna cadena que contenga menos de tres caracteres.
b) Escribir un nuevo método de la clase, al que podemos denominar combinadoSiempre que en caso de que se pasen cadenas con menos de tres caracteres, las combine de todas formas en base a los caracteres disponibles, sea el número que sea.
2
El código podría ser el siguiente
/* Ejemplo - aprenderaprogramar.com */
// Definición de una clase de ejemplo con uso del método length sobre objetos String aprenderaprogramar.com
// Combina las tres primeras letras de dos textos introducidos por el usuario en una sola cadena separada por un espacio
public class Combinador {
private String texto1;
private String texto2;
public Combinador () { texto1 = ""; texto2 = ""; }
//Método que combina las tres primeras letras de cada cadena
String Combinacion (String valor_texto1, String valor_texto2) {
if (valor_texto1.length() >= 3 && valor_texto2.length() >= 3) { //Comprobación
String combinacion = valor_texto1.substring (0, 3) + " " + valor_texto2.substring (0 ,3);
return combinacion;
} else { return "No aporta cadenas válidas"; }
} //Cierre del método
//Método que combina las cadenas aunque contengan menos de 3 caracteres (nuevo método)
String CombinadoSiempre (String valor_texto1, String valor_texto2) {
int longitud_texto1 = 3; //Si podemos extraeremos tres caracteres
int longitud_texto2 = 3;
3
String CombinadoSiempre = ""; //Cadena vacía, variable local
if (valor_texto1.length() < 3) { //Si hay menos de 3 caracteres extraemos los que haya
longitud_texto1 = valor_texto1.length();
}
if (valor_texto2.length() < 3) { longitud_texto2 = valor_texto2.length(); }
CombinadoSiempre = valor_texto1.substring (0,longitud_texto1)+" "+ valor_texto2.substring (0, longitud_texto2);
return CombinadoSiempre;
} //Cierre del método
} //Cierre de la clase
Recuerda que los espacios cuentan. No es lo mismo una cadena de longitud cero o cadena vacía, representada por dos comillas sin espacio entre ellas, que una cadena que contenga un espacio, representada por dos cadenas que contengan un espacio entre ellas, cuya longitud o número de caracteres es 1.
4
DE PUERTO (JAVA COM)
CONCEPTOS FUNDAMENTALES DE INTERRUPCIONES Y PUERTOS.
CONCEPTO DE INTERRUPCIÓN:
Ya que un procesador no puede procesar simultáneamente varios trozos de
información (procesa un trozo de información por vez), un programa que está
siendo ejecutado puede, gracias al pedido de interrupción, ser
momentáneamente suspendido mientras se produce una interrupción.
El programa interrumpido puede continuar ejecutándose luego. Existen 256
direcciones de interrupción diferentes.
Una interrupción se convierte en una interrupción de hardware cuando es
solicitada por uno de los componentes de hardware del equipo. En efecto,
existen varios periféricos en un equipo. Estos periféricos necesitan
generalmente utilizar los recursos del sistema aunque sólo sea para
comunicarse con el sistema mismo.
Cuando un periférico desea acceder a un recurso, envía un pedido de
interrupción al procesador para llamar su atención. Los periféricos cuentan con
un número de interrupción que se denomina IRQ (Peticiones de Interrupción.
Es como si cada periférico tirara de un “hilo” que está atado a una campana
para señalarle al equipo que desea que le preste atención.
Este “hilo” es, de hecho, una línea física que conecta cada ranura de
expansión así como cada interfaz E/S a la placa madre. Para una ranura ISA
de 8 bits, por ejemplo, hay 8 líneas IRQ que unen ranuras ISA de 8 bits a la
placa madre (IRQ0 a IRQ7). Estos IRQ están controlados por un “controlador
de interrupción” que se encarga de “cederle la palabra” al IRQ que posee la
mayor prioridad.
{text:bookmark-start} {text:bookmark-end}
Los *métodos interrupt* que se manejan en Java. Son 3
Interrupt()
Interrupted()
isInterrupted()
Interrupciones Sintaxis
Primero el método checkAccess de este thread es invocado, lo cual puede
causar una Security Exception.
5
Si este thread es bloqueado en un selector, entonces el estado del thread de
intrrupt será fijado, y retornara inmediatamente de la operación de selección,
posiblemente con un valor diferente a cero, justo como si el método del selector
wakeup hubiera sido invocado.
Si ninguna de las condiciones pasadas se cumple, entonces el estado en
interrupt del thread será fijado (activado).
Interrupted (interrumpido)
Sintaxis Public static boolean interrupted ()
Hace una prueba si el thread actual a sido interrumpido. El estado de
interrupción del thread es deshecho por este método. En otras palabras, si este
método se llamara dos veces, la segunda vez devolvería un valor falso (al
menos que el thread actual sea interrumpido de nuevo, después de que la
primera llamada haya terminado su interrupción y antes de que la segunda
empiece).
Returns: Verdadero si el thread actual a sido interrumpido, falso de lo contrario
PUERTO SERIAL Y SUS VARIANTES
{draw:frame} Puerto serial, puerto COM, puerto de comunicaciones y puerto
RS-232(“Recomended Standard-232”), hacen referencia al mismo puerto.
Es un conector que permite la transmisión de datos entre un dispositivo
externo (periférico), con la computadora; por ello es denominado puerto.
Todos los sistemas operativos de los ordenadores que están en uso hoy en
día, soportan los puertos serie, ya que han estado en funcionamiento durante
décadas. Los puertos paralelos son una invención más reciente y son mucho
más rápidos que los puertos serie. Los puertos USB solo tienen unos pocos
años de antigüedad, y con el tiempo seguramente reemplazaran a los puertos
serie y paralelo en los próximos años.
El nombre de serie viene por el hecho de que un puerto serie serializa los
datos. Esto significa que coge un byte de datos y trasmite los 8 bits que
contiene el byte uno a la vez. La ventaja es que los puertos serie solo necesitan
un hilo para transmitir los 8 bits, mientras que los paralelo necesitan 8. La
desventaja es que lleva 8 veces más de tiempo que si tuviera 8 hilos. Los
puertos serie bajan el coste de los cables y hacen que sean mas pequeños.
Antes de cada byte de datos, los puertos serie envían un bit de comienzo, el
cual es un único bit con un valor de 0. Después de cada byte de datos, envía
6
un bit de parada para señalar que el byte esta completo. También envía un bit
de paridad.
Terminales eléctricas del puerto serial. El puerto serial cuenta con 9
contactos tipo pin, se muestran las líneas eléctricas y su descripción básica.
Variantes físicas del puerto serial. Los puertos serie, también llamados
puertos de comunicación (COM), son bidireccionales. La comunicación
bidireccional permite a cada dispositivo recibir datos a la vez que los transmite.
Los dispositivos serie usan pines diferentes para el recibir y enviar datos, usar
los mismos pines significaría que la comunicación estaría limitada a half-
duplex, y que la información viajaría en una sola dirección a la vez. Usar pines
diferentes permite una comunicación full-dúplex, y puede viajar en ambos
sentidos.
PUERTO PARALELO Y SUS VARIANTES
Definición: Un puerto es el lugar donde el CPU se comunica con otros
dispositivos, existen de varios tipos, hay puertos de entrada, de salida y ambos.
Además estos pueden ser seriales o paralelos.
Puertos de salida: Son todos aquellos por donde el CPU envía datos a otros
dispositivos, por ejemplo están la salida de video y de sonido.
Nosotros vamos a hablar acerca de los puertos que se encuentran fuera del
gabinete, hablaremos de los puertos de teclado, mouse, impresoras, etc. La
computadora por si misma no sería capaz de realizar operaciones útiles para
nosotros si no podemos comunicarnos con ella, necesita dispositivos
periféricos por donde pueda darnos mensajes y nosotros podamos enviarle
órdenes.
Ahora bien, existen infinidad de dispositivos que sirven de extensión a la
computadora, muchos son para fines muy específicos y no se pueden abarcar,
entre los dispositivos que son de uso común se encuentra la impresora, el
teclado, el mouse y el monitor.
Puerto serial: El puerto serial es aquel que envía y recibe los datos BIT por
BIT, entre los puertos seriales se puede mencionar el puerto de teclado, o el
puerto del MODEM.
Puerto paralelo: Este tipo de puerto transmite la información byte por byte, o
sea que transmite ocho bits al mismo tiempo, de forma paralela. Un puerto
paralelo por excelencia pues es el puerto para impresora
7
Se puede observar que un puerto de entrada puede ser paralelo o serial, lo
mismo que un puerto de entrada o de entrada / salida.
A cada puerto la BIOS le asigna una dirección de memoria para que pueda
trabajar, dependiendo de que clase de puerto sea se le asigna un determinado
espacio exclusivo para él. Por medio de estas localidades de memoria el
sistema puede enviarles o recibir información, es una especie de memoria de
intercambio para la transmisión de dados de un lugar a otro. A esto se le llama
espacio de localidades de memoria y se realiza dentro del primer kilo bite de la
memoria principal. Existen otras asignaciones de memoria en otras capas
superiores de memoria pero estas son hechas por el sistema operativo y por
los demás programas, pero estas asignaciones son para fines específicos de
los demás programas.
Los puertos no solo se limitan a recibir la información, o enviarla, según sea el
caso. El puerto provee la corriente eléctrica necesaria para el funcionamiento
del dispositivo y revisa el estado de este.
INTERRUPCIONES QUE INTERVIENEN EN CADA PUNTO
Una interrupción es un mecanismo que permite ejecutar un bloque de
instrucciones interrumpiendo la ejecución de un programa, y luego restablecer
la ejecución del mismo sin afectarlodirectamente. De este modo un programa
puede ser interrumpido temporalmente para atender alguna necesidad urgente
del computador y luego continuar su ejecución como si nada hubiera pasado.
Generalmente se aplica para realizar tareas elementales asincrónicas en el
computador tales como responder al teclado, escribir en la pantalla, leer y
escribir archivos. Podemos considerar una tarea asincrónica como aquella que
es solicitada sin previo aviso y aleatoriamente desde el punto de vista del
computador. Tomemos el caso de la operación Ctrl-Alt-Supr. En Windows tiene
el efecto de que aparece en pantalla una lista de los procesos y ventanas en
ejecución en el computador. En cambio en el Sistema Operativo DOS cuando
el usuario presiona simultáneamente dichas teclas el computador procede a
reinicializarse, aunque pueda estar ocupado ejecutando un programa en ese
instante. Vale decir fuerza obligadamente a que el computador se reinicialice.
Ya sea en el sistema Windows o en DOS, el computador no está
constantemente monitoreando el teclado para ver si el usuario ha solicitado un
Ctrl-Alt-Del, ya que en ese caso consumiría mucho tiempo de proceso en ello y
por ende la capacidad de proceso se vería significativamente afectada. La
solución empleada es una interrupción.
8
Luego cada vez que el usuario presiona una tecla, la CPU es advertida a
través de una señal especial de interrupción. Cuando la CPU advierte/recibe
una señal de interrupción suspende temporalmente el proceso actual
almacenando en memoria RAMun bloque con toda la información necesaria
para restablecer posteriormente la ejecución del programa si es que procede.
Enseguida la CPU determina qué elemento ha solicitado la interrupción y para
cada caso existe un bloque de instrucciones que realiza la tarea
correspondiente que es ejecutada a continuación. Terminada la ejecución se
restablece el programa original en el mismo punto en que fue interrumpido
usando para ello la información almacenada previamente.
Cada interrupción tiene asignada un número único. El PC está diseñado de
manera que la interrupción tiene asignada 4 bytes de memoria RAM. La
dirección de los cuatro bytes en la memoria corresponde al _número de la
_interrupción multiplicado por 4. Por ejemplo la interrupción IRQ 5 tiene
asignada 4 bytes en la dirección 0x00014 (0000:0014). El contenido de los 4
bytes de memoria RAM asignados a una interrupción contiene a su vez una
dirección que es un puntero a un bloque de instrucciones de máquina que
realiza el procedimiento correspondiente. De este modo al iniciar la ejecución
de una interrupción de los cuatro bytes que tiene asignados se obtiene la
dirección del bloque de instrucciones que efectivamente se ejecutan. Por
ejemplo si en la dirección 0000:0014 estuviera almacenado el valor 0xFFF00,
ello significa que en dicha dirección (ó (F000:FF00) se encuentra el bloque de
instrucciones a ejecutar cuando la interrupción IRQ 5 sea requerida.
Esta forma de direccionamiento indirectopara las interrupciones brinda la
flexibilidad necesaria para perfeccionar, modificar y extender el código de
instrucciones correspondiente permitiendo mantener por ejemplo la
compatibilidad de las distintas versiones de BIOS con las aplicaciones y
equipos que usan las interrupciones.
Tipos de interrupciones
Existen tres tipos de interrupciones:
a) requeridas por hardware
Una lista de las interrupciones generadas por hardware es la siguiente
b) requerida por software para interactuar con periféricos
Los vectores de las interrupciones BIOS están ubicados a partir del vector
0x10H, vale decir inmediatamente a continuación de los vectores 0 a15 que
son generados por hardware y que no son enmascarables. Cabe hacer notar
que la arquitectura del PC está definida de tal manera que el primer Kilobyte
9
del espacio de memoria está reservado para vectores de interrupciones, vale
decir hay espacio para 256 interrupciones.
Las interrupciones BIOS más importantes son las siguientes
ENVIÓ Y RECEPCIÓN DE DATOS
Cuando se escriben programas Java que se comunican a través de la red, se
está programando en la capa de aplicación. Típicamente, no se necesita
trabajar con las capas TCP y UDP — en su lugar se puede utilizar las clases
del paquete java.net. Estas clases proporcionan comunicación de red
independiente del sistema.
A través de las clases del paquete java.net, los programas Java puede utilizan
TCP o UDP para comunicarse a través de Internet. Las clases URL, URL
Connection, Socket, y Socket Server? Utilizan el TCP para comunicarse a
través de la Red. Las clases ? Y Datagram Server? Utilizan UDP.
TCP proporciona un canal de comunicación fiable punto a punto, lo que utilizan
para comunicarse las aplicaciones cliente-servidor en Internet. Las clases
Socket y Server Socket del paquete java.net proporcionan un canal de
comunicación independiente del sistema utilizando TCP, cada una de las
cuales implementa el lado del cliente y el servidor respectivamente.
La clase Socket del paquete java.net es una implementación independiente de
la plataforma de un cliente para un enlace de comunicación de dos vías entre
un cliente y un servidor. La clase Socket se sitúa en la parte superior de una
implementación dependiente de la plataforma, ocultando los detalles de los
sistemas particulares a un programa Java. Utilizando la clase java.net.Socket
en lugar de tratar con código nativo, los programas Java pueden comunicarse a
través de la red de una forma independiente de la plataforma.
El entorno de desarrollo de Java incluye un paquete, java.io, que contiene un
juego de canales de entrada y salida que los programas pueden utilizar para
leer y escribir datos. Las clases Input Stream y Output Stream del paquete
java.io son superclases abstractas que definen el comportamiento de los
canales de I/O secuenciales de Java. java.io también incluye muchas
subclases de Input Stream y Output Stream que implementan tipos específicos
de canales de I/O.
10
BÁSICAMENTE DISPONEMOS DE DOS TIPOS DE SERVICIO:
Servicio sin conexión, donde el emisor y el receptor intercambian paquetes de
información sin establecer una conexión previa, donde tampoco disponemos de
un control de secuencia ni control de errores. En este tipo de conexión
operamos con Datagramas y el protocolo empleado es UDP.
Servicio orientado a conexión: Donde disponemos de un stream que nos
asegura la entrega de la información de forma ordenada y fiable. Operamos
con streams y el protocolo empleado es TCP
JAVA NOS DA SOPORTE PARA:
getAddress() getAllByName(string) getByName(String) getHostAddress()
getHostName() getLocalHost() hashCode() isMulticastAddress() toString()
Envío y recepción de datos a través de sockets:
El servidor crea un Socket, mediante Server Socket, le asigna una dirección y
un puerto y acepta llamadas (accept). A partir de este momento el proceso
queda bloqueado a la espera de una llamada. Cuando llega una llamada, el
accept crea un nuevo socket para procesar dicha llamada. Es únicamente en
ese momento cuando existe la conexión y durará hasta que se libere mediante
close().
Los sockets tienen asociados un Stream de entrada y otro de salida a través
de los cuales se leen y escriben los datos:
Para enviar datos se puede utilizar el Output Stream del socket, para enviar un
flujo de bytes sin buffer. Pero también se puede crear un objeto de tipo stream
de datos basado en el Output Stream.
_Socket socket = new Socket (“158.42.112.67″, 1056); _
_String linea; _
teclado_ = new Buffered Reader(new _Input Stream Reader?_(System.in)); _
escribir_ = new Print Writer(socket.getOutputStream(),true); _
do_ { _
linea_=teclado.readLine(); _
escribir.println_(linea); _
_} while (linea.compareTo(“#”)!=0); _
….
11
Para recibir datos se puede utilizar Input Stream o definir un nuevo objeto del
mismo tipo más eficiente.
Ejemplo:
Buffered Reader leer;
String s;
leer=_new Buffered Reader( new Input Stream Reader
(socketRecepcion.getInputStream() ) ); _
while_ (“#”.compareTo(s=leer.readLine()!=0) { _
System.out.println_(nombre+”: “+s); _
}
THREADS: En el programa se pueden implementar varios hilos de ejcución o
threads. Podemos crear un servidor concurrente que ejecute el mismo código
para cada cliente. Para ello podemos implementar un servidor para un solo
cliente y dedicar un thread por cliente.
Implementando una nueva clase derivada de la clase Thread.
Creando una nueva clase que implemente el interface Runnable.
Import java.io.*;
Import java.net.*;
Class _Servidor Eco Tcp__ extends Thread { _
Socket s=null;
?_(Socket s) {this.s=s;} _
_Public void run() { _
_Try { Input Stream is=s.getInputStream(); _
Output Stream _os=s.getOutputStream(); _
While(_true) os.write(is.read()); _
} catch (IO Exception_ e) {__System.out.println(“Error en socket”);}} _
_Public static void main(String agrs[]) throws IO Exception , _Unknown Host
Exception?_ { _
_Server Socket ss=new Server Socket(7); _
12
While(true) {
_e.start(); _ } } }
Existe otro tipo de socket, RAW SOCKET que no opera en el nivel de
transporte y accede directamente al nivel de red. Este tipo de socket suele ser
utilizado por aplicaciones con privilegios para la definición de protocolos de
bajo nivel.
{text:bookmark-start} Puertos y Servicios
Cada servicio está asociado a un puerto. Un puerto es una dirección numérica
a través de la cual se procesa el servicio. Sobre un sistema Unix, los servicios
que proporciona ese sistema se indican en el fichero /etc/services, y algunos
ejemplos son:
La primera columna indica el nombre del servicio. La segunda columna indica
el puerto y el protocolo que está asociado al servicio. La tercera columna es un
alias del servicio; por ejemplo, el servicio smtp, también conocido como mail, es
la implementación del servicio de correo electrónico.
Las comunicaciones de información relacionada con Web tienen lugar a través
del puerto 80 mediante protocolo TCP. Para emular esto en Java, usaremos la
clase Socket. La fecha (daytime). Sin embargo, el servicio que coge la fecha y
la hora del sistema, está ligado al puerto 13 utilizando el protocolo UDP. Un
servidor que lo emule en Java usaría un objeto
13
MULTIMEDIA (JAVA FRAMEWORKS)
APLICACIONES MULTIMEDIA
Una aplicación multimedia es aquella que produce, reproduce, procesa o maneja uno o varios contenidos multimedia. A su vez un contenido multimedia es aquel que está compuesto de diversos “medios”, como pueden ser audio, video, texto, etc. Decimos que un contenido multimedia está basado en el tiempo en tanto que cada uno de sus medios cambia significativamente con él. Esta característica hace que un contenido multimedia requiera ser proporcionado y procesado en unas condiciones temporales estrictas. Por ejemplo cuando se reproduce un video, si los datos multimedia no pueden ser proporcionados lo suficientemente rápido pueden producirse pausas y retardos en la reproducción; por otro lado si los datos no pueden ser recibidos y procesados lo suficientemente rápido el video se reproduce a saltos en tanto que se desechan cuadros como medio para mantener la tasa de reproducción.
Cada uno de los medios de los que se compone un contenido multimedia se denomina pista. Por ejemplo un contenido multimedia correspondiente a una videoconferencia puede contener una pista de audio y otra de video. Se dice que las pistas que componen un contenido multimedia están multiplexadas, al proceso de extracción de las distintas pistas que componen un contenido multimedia se le denomina demultiplexación. Existen distintos tipos de pistas en función del tipo de datos que contienen, como audio y/o video; a su vez cada pista posee un formato que define como están estructurados los datos que forman parte de ella. Los distintos formatos se distinguen en función de:
• La calidad que proporcionan
• Su exigencia de recursos de CPU para ser procesados
• La cantidad de ancho de banda requerida para su transmisión
Tabla 1 - Formatos multimedia soportados por JMF y sus características
Formato Calidad Uso CPU Ancho de banda Cinepak Media Bajo Alto MPEG 1 Alta Alto Alto H.261 Baja Medio Medio H.263 Media Medio Bajo JPEG Alta Alto Alto Indeo Media Medio Medio PCM Alta Bajo Alto Mu-Law Baja Bajo Alto ADPCM (DVI, IMA) Media Medio Medio MPEG 1 Alta Alto Alto MPEG 1 Layer 3 Alta Alto Medio GSM Baja Bajo Bajo G.723.1 Media Medio Bajo
14
Cada formato está destinado a diferentes tipos de aplicaciones y servicios. Formatos como MPEG 1 de gran calidad pero altos requerimientos de ancho de banda están destinados usualmente a aplicaciones que trabajan con almacenamiento local o en dispositivos ópticos como CD-ROM o DVD donde el ancho de banda y la capacidad de almacenamiento no son limitantes. En cambio otros formatos como H.261 y H.263 se usan para aplicaciones de videoconferencia donde el ancho de banda es un bien muy escaso; de la misma forma G.723 se usa para producir voz codificada con tasa de bits reducida para aplicaciones de telefonía IP por ejemplo.
FUENTES DE DATOS MULTIMEDIA
En Java Media Framework los datos multimedia pueden proceder de diversas fuentes, como archivos locales o remotos y video y audio en tiempo real o bajo demanda.
Una fuente de datos multimedia se modela mediante un objeto DataSource. Podemos crear una DataSource directamente a través de una URL (Universal Resource Locator) o bien mediante un objeto de tipo MediaLocator.
SOCKET ()
DEFINICIÓN DE SOCKET
Un socket (enchufe), es un método para la comunicación entre un programa del cliente y un programa del servidor en una red. Un socket se define como el punto final en una conexión. Los sockets se crean y se utilizan con un sistema de peticiones o de llamadas de función a veces llamados interfaz de programación de aplicación de sockets (API, application programming interface).
Un socket es también una dirección de Internet, combinando una dirección IP (la dirección numérica única de cuatro partes que identifica a un ordenador particular en Internet) y un número de puerto (el número que identifica una aplicación de Internet particular, como FTP, Gopher, o WWW).