Cómo implementar el protocolo TCP en Java
Implementación de la programación del protocolo TCP en Java
ServerSocket: para escribir un programa de servicio de red TCP, primero debe usar la clase java.net.ServerSocket para crear un socket de servidor
Método de construcción:
ServerSocket(int?port): crea un socket de servidor vinculado a un puerto específico
ServerSocket(int?port, ?int?backlog): utiliza el especificado del trabajo pendiente (el número de clientes que esperan mantener las solicitudes conectadas mientras el servidor está ocupado), crea un socket de servidor y lo vincula al número de puerto local especificado.
ServerSocket(int?port, ?int?backlog, ?InetAddress?bindAddr): crea un servidor con el puerto especificado, escuchando el ?backlog? y la dirección ?IP?
Socket: para establecer una conexión con el servidor, el cliente primero debe crear un objeto Socket.
Métodos de construcción comunes
Socket(String?host,?int ?port): crea un socket de transmisión y lo conecta al número de puerto especificado en el host especificado.
Socket(InetAddress?address, ?int?port): crea un socket de flujo y lo conecta al número de puerto especificado en la dirección ?IP?
El programa del lado del servidor llama al método Accept() en la clase ServerSocket para esperar la solicitud de conexión del cliente. Una vez que Accept() recibe la solicitud de conexión del cliente, el método devuelve un Socket que ha establecido un dedicado. conexión de línea con el objeto cliente, no se necesita ningún programa para crear este objeto Socket. Los dos Sockets que han establecido una conexión intercambian datos en forma de flujos IO. Java proporciona getInputStream() en la clase Socket para devolver el objeto de flujo de entrada del Socket y getOutputStream() para devolver el objeto de flujo de salida del Socket.
Ilustración de la recepción de datos entre el servidor TCP y el cliente TCP:
Pasos para crear un programa de servidor TCP
(1) Crear un ServerSocket
(2) Aceptar solicitudes de conexión de clientes desde ServerSocket
(3) Crear un hilo de servicio para procesar nuevas conexiones
(4) En el hilo de servicio, desde el socket Obtener el I /O flujo
(5) Leer y escribir el flujo de E/S para completar la interacción con el cliente
(6) Cerrar el flujo de E/S
(7) Cerrar Socket
ServerSocket?server=new?ServerSocket(port)
Socket?s?=server.accept();
ObjectInputStream? in=new?ObjectInputStream(s.getInputStream());
ObjectOutputStream?out=new?ObjectOutputStream(s.getOutputStream());
out.close(); p>
in.close();
s.close();
Pasos para crear un programa cliente TCP
(1) Crear socket
(2) Obtener el flujo de E/S
(3) Leer y escribir el flujo de E/S
(4) Cerrar el flujo de E/S O flujo
(5) Cerrar Socket
Socket?connection?=new?Socket(127.0.0.1, 9009);
ObjectInputStream?input=new? ObjectInputStream(connection.getInputStream());
ObjectOutputStream?output=new?ObjectOutputStream(connection.getOutputStream());
output.close();
input.close();
connection.close();
Utilice TCP para implementar el "chat" entre el servidor y el cliente:
Código de ejemplo :
p>
Cliente:
paquete?com.hbsi.net;
importación?java.net.Socket;
import?java.io .*;
public?class?TcpClient{
public?static?void?main(String[]?args)?throws?Exception?{
///?1. Para establecer un socket de cliente TCP, determine la IP del servidor y el puerto al que se conectará
Socket?s?=?new?Socket("192.168.49.87" ,?9009);
//?Obtener entrada de teclado
BufferedReader?br?=?new?BufferedReader(new?InputStreamReader(System.in));
//?2 Pase Cree el socket y obtenga el objeto de flujo de salida
//?Datos de salida al servidor
OutputStream?out.
?=?s.getOutputStream();
BufferedWriter?bwout?=?new?BufferedWriter(new?OutputStreamWriter(out));
//?Obtener los datos devueltos por server
//?Leer la información enviada por el servidor InputStreamReader()
BufferedReader?brin?=?new?BufferedReader(new?InputStreamReader(
s .getInputStream()));
String?line?=?null;
mientras?((line?=?br.readLine())?!=?null)? {
if?(line.equals("over"))
descanso;
bwout.write(line);
bwout.newLine();
bwout.flush();
String?str?=?brin.readLine();
System.out.println ("servidor:"? ?str);
}
br.close();
s.close();
}
}
Lado del servidor:
paquete?com.hbsi.net;
importación?java.io.BufferedReader;
importar?java.io.BufferedWriter;
importar?java.io.InputStream;
importar?java.io.InputStreamReader;
importar?java.io.OutputStreamWriter;
importar?java.net.ServerSocket;
importar?java.net.Socket;
clase?pública ?TcpServer{
public?static?void?main(String[]?args)?throws?Exception?{
//?1. Crear un socket de servidor
ServerSocket?ss?=?new?ServerSocket(9009);
//?2. Llamar a aceptar()
Socket?s?=?ss.accept()
System.out.println(s.getInetAddress().getHostAddress()
?"...conexión");
//?Leer Flujo de entrada de información del cliente
InputStream?in?=?s.getInputStream();
BufferedReader?brin?=?new?BufferedReader(new?InputStreamReader(in)); /p>
//?Envíe el flujo de salida de información al cliente y el servidor devuelve la información al cliente OutputStreamWriter()
BufferedWriter?br
out?=?new?BufferedWriter(new?OutputStreamWriter(
s.getOutputStream())); String?line?=?null;
mientras?((line?=? brin.readLine())?=?null)?{
System.out.println("cliente: "? ?line);
brout.write(line.toUpperCase ( )); //Después de que el servidor recibe la información, la convierte a mayúsculas y la devuelve al cliente aUpperCase()
brout.newLine();
brout.flush. () ;
}
s.close();
ss.close();
}
}