JavaSE- programación de la red (programación TCP, UDP programación, URL)

1. conjunto de protocolos TCP / IP

  • Protocolo de transporte Hay dos protocolos muy importantes:
    Transmission Control Protocol TCP (Transmission Control Protocol)
    protocolo de datagrama de usuario UDP (User Datagram Protocol). TCP / IP sus dos protocolos principales: Protocolo de control de transmisión (TCP) y el Protocolo de Internetworking (IP) se llama, es en realidad un conjunto de protocolos, que incluye una pluralidad de protocolos que tienen diferentes funciones y relacionados entre sí.
  • IP (Internet Protocol) protocolo de capa de red es el principal protocolo para soportar las comunicaciones de datos de internetworking.
  • modelo de protocolo TCP / IP desde un punto de vista más práctico, la formación de una arquitectura de cuatro capas eficiente, es decir, una capa física de enlace, la capa de IP, la capa de transporte y capa de aplicación.

1.1 protocolo TCP

Antes de utilizar el protocolo TCP, primero debe establecer una conexión TCP, forman un conjunto de datos de canal de transmisión
antes de la transmisión, un modo de "apretón de manos de tres vías", seleccione la comunicación punto, fiable
dos aplicación procesa el protocolo TCP para la comunicación: el cliente, el servidor.
La conexión se puede transmitir en una gran cantidad de datos
La transferencia se completa, la necesidad de liberar una conexión establecida, la ineficiencia
Aquí Insertar imagen Descripción

Aquí Insertar imagen Descripción

1.2 protocolo UDP

Los datos, fuente y destino encapsulado en paquetes, sin establecer una conexión
al tamaño de cada paquete está limitado a 64 K
envió independientemente de si la otra parte está listo, el destinatario no recibe una confirmación, no es fiable
lata de difusión de transmisión
de datos de transmisión al final del recurso sin liberar pequeña sobrecarga, rápido

1.3 Socket

  • El uso de zócalo (socket) para desarrollar aplicaciones web ha sido ampliamente adoptado larga, de manera que un estándar de facto.
  • Una combinación de dirección IP y número de puerto en la red con un conjunto identificador único para constituir un identificador único para identificar el socket.
  • Los extremos de la comunicación deben tener Socket, el punto final de la comunicación entre dos máquinas.
  • De hecho, el tráfico de red es la comunicación entre el zócalo.
  • programa Socket permite la conexión de red como una transmisión de corriente, los datos entre los dos IO Socket.
  • aplicación general de comunicación iniciados es un cliente espera para las solicitudes de comunicación del servidor.
  • Socket Categoría:
    Toma de corriente (socket de flujo): el uso de flujo de bytes TCP para proporcionar un servicio seguro
    socket de datagramas (datagrama socket): usando UDP proporciona "mejor esfuerzo" datagrama servicio
  • Toma de constructor de la clase común:
public Socket(InetAddress address,int port)创建一个流套接字并将其连接到指定 IP 地址的指定端口号。 
public Socket(String host,int port)创建一个流套接字并将其连接到指定主机上的指定端口号。
  • clase Socket método común:
public InputStream getInputStream()返回此套接字的输入流。可以用于接收网络消息
public OutputStream getOutputStream()返回此套接字的输出流。可以用于发送网络消息
public InetAddress getInetAddress()此套接字连接到的远程 IP 地址;如果套接字是未连接的,则返回 null。 
public InetAddress getLocalAddress()获取套接字绑定的本地地址。 即本端的IP地址
public int getPort()此套接字连接到的远程端口号;如果尚未连接套接字,则返回 0public int getLocalPort()返回此套接字绑定到的本地端口。 如果尚未绑定套接字,则返回 -1。即本端的端口号。 
public void close()关闭此套接字。套接字被关闭后,便不可在以后的网络连接中使用(即无法重新连接或重新绑定)。需要创建新的套接字对象。 关闭此套接字也将会关闭该套接字的 InputStream 和OutputStream。 
public void shutdownInput()如果在套接字上调用 shutdownInput() 后从套接字输入流读取内容,则流将返回 EOF(文件结束符)。 即不能在从此套接字的输入流中接收任何数据。 
public void shutdownOutput()禁用此套接字的输出流。对于 TCP 套接字,任何以前写入的数据都将被发送,并且后跟 TCP 的正常连接终止序列。 如果在套接字上调用 shutdownOutput() 后写入套接字输出流,则该流将抛出 IOException。 即不能通过此套接字的输出流发送任何数据。

2. Sobre la base de la programación de Socket TCP

  • Sobre la base de la toma de lenguaje de programación Java en el programa programa de servidor y cliente, el modelo de comunicación que se muestra en la figura:
    -Aquí Insertar imagen Descripción

2.1 cliente crea un objeto Socket

  • Toma de proceso de trabajo del cliente incluye los siguientes cuatro pasos básicos:
  1. La creación del zócalo: basándose en la dirección o el número de puerto especificado constructor de objeto lado del servicio IP clase Socket. Si la respuesta al servidor, el cliente para establecer una línea de comunicación con el servidor. Si la conexión falla, habrá una excepción.
  2. apertura Socket conectado a la entrada / flujo de salida: utilizando el método getInputStream () para obtener el flujo de entrada, usando
    el método getOutputStream () para obtener el flujo de salida, transmisión de datos
  3. Socket de acuerdo con un protocolo determinado para las operaciones de lectura / escritura: leer el servidor mediante la colocación de la información en la línea de flujo de entrada (pero no lee la información en su propia línea), la información es escrita por el flujo de salida del hilo.
  4. Cerca del zócalo: Desconectar al cliente conectarse al servidor, liberar la línea

API de Java:

  • El programa cliente puede crear un objeto utilizando la clase Socket, creado al mismo tiempo, inicia automáticamente una conexión con el servidor. Toma de constructor es:
Socket(String host,int port)throws UnknownHostException,IOException:向服务器(域名是host。端口号为port)发起TCP连接,若成功,则创建Socket对象,否则抛出异常。
Socket(InetAddress address,int port)throws IOException:根据InetAddress对象所表示的IP地址以及端口号port发起连接。
Socket s = new 
Socket(192.168.1.160,9999);
OutputStream out = s.getOutputStream();
out.write(" hello".getBytes());
s.close();
  • El proceso de cliente para establecer socketAtClient objeto es emitir una solicitud al servidor de conexión de socket

2.1 servidor para establecer un objeto ServerSocket

  • programa de servidor de proceso de trabajo consta de los siguientes cuatro pasos básicos:
  • Llamada ServerSocket (int puerto): Crea un socket de servidor, con destino al puerto especificado. Escucha las peticiones de los clientes.
  • De aceptación de llamada (): detecta las solicitudes de conexión, si el cliente solicita una conexión, la conexión es aceptada, devuelve un objeto socket de comunicación.
  • clase Socket llama al objeto del getOutputStream () y getInputStream (): Obtener el flujo de entrada y flujo de salida, comenzar a enviar y recibir datos de la red.
  • Cerrar ServerSocket y el objeto del zócalo: acceso de cliente terminado, cerca zócalo de la comunicación

API de Java:

ServerSocket ss = new ServerSocket(9999);
Socket s = ss.accept ();
InputStream in = s.getInputStream();
byte[] buf = new byte[1024];
int num = in.read(buf);
String str = new String(buf,0,num);
System.out.println(s.getInetAddress().toString()+:+str);
s.close();
ss.close();

2. Programación de red UDP

2.1 red de comunicación UDP

  • DatagramSocket clase y DatagramPacket implementados con base en el programa de red de protocolo UDP.
  • Datagrama UDP de datagramas tomas DatagramSocket para enviar y recibir, el sistema no garantiza el datagrama UDP será capaz de asegurar enviado al destino, no se puede determinar cuándo se debe llegar.
  • objetos DatagramPacket encapsulado de datagramas UDP incluye una dirección IP del extremo emisor y el extremo receptor del número de puerto y la dirección IP y número de puerto en el datagrama.
  • Cada protocolo de datagramas UDP da una información de dirección completa, no es necesario establecer una conexión de emisor y receptor. Como hizo expresar el mismo paquete.

2.2 API

  • método común de DatagramSocket:
public DatagramSocket(int port)创建数据报套接字并将其绑定到本地主机上的指定端口。套接字将被
绑定到通配符地址,IP 地址由内核来选择。
public DatagramSocket(int port,InetAddress laddr)创建数据报套接字,将其绑定到指定的本地地址。本地端口必须在 065535 之间(包括两者)。如果 IP 地址为 0.0.0.0,套接字将被绑定到通配符地
址,IP 地址由内核选择。 
public void close()关闭此数据报套接字。 
public void send(DatagramPacket p)从此套接字发送数据报包。DatagramPacket 包含的信息指示:将要发送的数据、其长度、远程主机的 IP 地址和远程主机的端口号。 
public void receive(DatagramPacket p)从此套接字接收数据报包。当此方法返回时,DatagramPacket的缓冲区填充了接收的数据。数据报包也包含发送方的 IP 地址和发送方机器上的端口号。 此方法在接收到数据报前一直阻塞。数据报包对象的 length 字段包含所接收信息的长度。如果信息比包的长度长,该信息将被截短。 
public InetAddress getLocalAddress()获取套接字绑定的本地地址。 
public int getLocalPort()返回此套接字绑定的本地主机上的端口号。 
public InetAddress getInetAddress()返回此套接字连接的地址。如果套接字未连接,则返回 null。 
public int getPort()返回此套接字的端口。如果套接字未连接,则返回 -1
  • método común de DatagramPacket:
public DatagramPacket(byte[] buf,int length)构造 DatagramPacket,用来接收长度为 length 的数据包。 length 参数必须小于等于 buf.length。 
public DatagramPacket(byte[] buf,int length,InetAddress address,int port)构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。length参数必须小于等于 buf.length。 
public InetAddress getAddress()返回某台机器的 IP 地址,此数据报将要发往该机器或者是从该机器接收到的。 
public int getPort()返回某台远程主机的端口号,此数据报将要发往该主机或者是从该主机接收到的。 
public byte[] getData()返回数据缓冲区。接收到的或将要发送的数据从缓冲区中的偏移量 offset 处开始,持续 length 长度。 
public int getLength()返回将要发送或接收到的数据的长度。

2.3 Código de Java

  • proceso:
  1. DatagramSocket 与 DatagramPacket
  2. Establecer el lado de transmisión, el extremo de recepción
  3. paquete de puesta a punto
  4. transmisión de la llamada, el método de recepción Socket
  5. Cerrar Socket
  • La transmisión y el receptor son dos corriendo programa separado
  • el remitente
DatagramSocket ds = null;
try {
	ds = new DatagramSocket();
	byte[] by = "hello,atguigu.com".getBytes();
	DatagramPacket dp = new DatagramPacket(by, 0, by.length, 
	InetAddress.getByName("127.0.0.1"), 10000);
	ds.send(dp);
} catch (Exception e) {
	e.printStackTrace();
} finally {
	if (ds != null)
		ds.close();
}
  • El extremo de recepción
    en el extremo receptor, para especificar el puerto está escuchando.
DatagramSocket ds = null;
try {
	ds = new DatagramSocket(10000);
	byte[] by = new byte[1024];
	DatagramPacket dp = new DatagramPacket(by, by.length);
	ds.receive(dp);
	String str = new String(dp.getData(), 0, dp.getLength());
	System.out.println(str + "--" + dp.getAddress());
} catch (Exception e) {
	e.printStackTrace();
} finally {
	if (ds != null)
		ds.close();
}

Clase 3. URL

  • URL (Uniform Resource Locator): Uniform Resource Locator, que indica la dirección de un recurso en Internet.
  • Es un URI específico, a saber URL se puede utilizar para identificar un recurso, sino que también indica cómo localizar este recurso.
  • Por URL podemos tener acceso a varios recursos de red en Internet, tales como el www común más, los sitios FTP. Por el navegador de análisis puede encontrar los archivos u otros recursos apropiados en la red de una determinada URL.
  • La estructura básica consiste en 5 partes de la URL: <Protocolo de transferencia>: <nombre de host> //: <número de puerto> / <nombre del archivo> # pieza lista de nombres de los parámetros?
    , Por ejemplo:
    http://192.168.1.100:8080/path/ Un index.jsp # nombre de usuario y contraseña = xxx xxxx =
    # nombre del fragmento: el ancla, como la lectura de novelas, posicionando al capítulo
    formato de lista de parámetros: nombre del parámetro = valor de parámetro & nombre del parámetro = valor del parámetro ...
  • clase de implementación Java utilizado URL de identificación java.net.URL, URL constructor:
public URL (String spec):通过一个表示URL地址的字符串可以构造一个URL对象。例
URL url = new URL ("http://www.xxxxxxx.com/"); 
public URL(URL context, String spec):通过基 URL 和相对 URL 构造一个 URL 对象。
URL downloadUrl = new URL(url, “download.html")
public URL(String protocol, String host, String file); 
new URL("http", "www.atguigu.com", “download. html");
public URL(String protocol, String host, int port, String file); 
URL gamelan = new URL("http", "www.atguigu.com", 80, “download.html");

Después de generar un objeto URL, sus atributos no se pueden cambiar, hay un método para obtener las propiedades:

public String getProtocol( ) 获取该URL的协议名
public String getHost( ) 获取该URL的主机名
public String getPort( ) 获取该URL的端口号
public String getPath( ) 获取该URL的文件路径
public String getFile( ) 获取该URL的文件名
public String getQuery( ) 获取该URL的查询名

4. clase URLConnection (para el protocolo HTTP)

  • El método openStream URL (): leer los datos de la red
  • Si desea datos de salida, por ejemplo, el CGI en el servidor (Common Gateway Interface -Common puerta de enlace Interface- para abreviar, es la interfaz para aplicaciones de navegador y el servidor del usuario conectado) programa para enviar algunos datos, primero debe establecer una conexión con la URL, y luego capacidad de leer y escribir, esta necesidad hora de utilizar el URLConnection.
  • URLConnection: representa una conexión con el objeto remoto al que hace referencia la URL. Al establecer una conexión con una dirección URL, primero la openConnection () generada por un procedimiento correspondiente a objeto URLConnection en un objeto URL. Si el procedimiento de conexión falla, el IOException generado.
URL netchinaren = new URL ("http://www.xxxxxxxx.com/index.shtml"); 
URLConnectonn u = netchinaren.openConnection( );
  • objeto URLConnection adquiere a través de los flujos de entrada y de salida, que puede interactuar con un programas CGI convencionales.
public Object getContent( ) throws IOException
public int getContentLength( )
public String getContentType( )
public long getDate( )
public long getLastModified( )
public InputStream getInputStream( )throws IOException
public OutputSteram getOutputStream( )throws IOException

4.1 diferencia URI, URL y URN de

  • URI, es el identificador uniforme de recursos, el identificador uniforme de recursos, que se utiliza para identificar únicamente un recurso. El URL es un localizador uniforme de recursos, un Localizador Uniforme de Recursos, que es un URI específico, a saber URL se puede utilizar para identificar un recurso, sino que también indica cómo localizar este recurso.
    La URN, nombre de recurso uniforme, nombre de recurso uniforme, el recurso se identifica por su nombre, tal como mailto: [email protected]. En otras palabras, URI es una definición abstracta, de alto nivel del concepto de identificador uniforme de recursos, y la URL y URN son recursos específicos identificados. URL y URN es un tipo de URI.
  • En URI de Java en una instancia de URI puede representar absoluta o relativa, siempre y cuando se cumpla con las normas de la URI de sintaxis. La clase URL no está solo en la semántica, también contiene información para localizar los recursos, por lo que no puede ser un pariente.

5. Resumen

  • Un ordenador situado en una red tiene una dirección IP única, por lo que diferentes equipos se pueden distinguir unos de otros.
  • El cliente - servidor es uno de los más modelo de aplicación de red común. Servidor es un hardware o software para proporcionar ciertos servicios a sus clientes. El cliente es una aplicación de usuario para acceder al servicio proporcionado por un servidor. El número de puerto es el acceso a un lugar de servicio, que se utiliza para distinguir entre múltiples servicios en la misma máquina física. Cada enchufe para la conexión de una sesión de comunicación entre el cliente y el servidor, el cliente y el servidor utilice una toma de corriente diferente. protocolo TCP para la implementación de una sesión orientada a la conexión.
  • funciones relativas a la red de Java se definen en el paquete java.net. Java representa el objeto de dirección InetAddress IP que tiene dos campos: el nombre de host (String) y la dirección IP (int).
  • protocolo TCP basado en el cliente zócalo y ServerSocket clase implementa - programa del servidor. Toma de una conexión entre las conexiones de cliente y servidor se ocultan datos creados. Esta conexión proporciona un canal de transmisión de datos seguro que es el protocolo TCP se puede resolver porque la pérdida de datos durante la transmisión, daños, repetidos problemas, revueltos y congestión de la red, lo que asegura la transferencia de datos fiable.
  • URL y URLConnection clase proporciona la mayor cantidad de aplicaciones de red avanzadas. Localización de recursos de red a la misma URL en Internet representan una variedad de recursos de la red. Se pueden crear conexiones entre las aplicaciones y recursos de red representados por la URL actual de objeto URL, por lo que el programa puede leer los datos actuales de recursos de red, o para transmitir sus datos a la red para arriba.
Publicados 336 artículos originales · ganado elogios 77 · vistas 570 000 +

Supongo que te gusta

Origin blog.csdn.net/feicongcong/article/details/104906088
Recomendado
Clasificación