Es posible enviar datos desde el servidor y recibir una respuesta del cliente. De manera similar, el cliente también puede enviar y recibir datos hacia y desde.
A continuación se detallan los distintos pasos para hacerlo:
- Necesitamos flujos adicionales tanto en el servidor como en el cliente. Por ejemplo, para recibir datos en el servidor, es una mejor idea usar un objeto BufferedReader , como se muestra en el siguiente fragmento de código:
InputStream obj = s.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(obj);
- Entonces se pueden usar los métodos read() o readLine() del objeto BufferedReader para leer datos. Para enviar datos desde el cliente podemos tomar la ayuda de la clase DataOutputStream como se muestra en el siguiente fragmento de código:
OutputStream obj + s.getOutputStrean(); DataOutputStream dos = new DataOutputStream(obj);
- Luego, el método writeBytes() de la clase DataOutputStream se puede usar para enviar strings en forma de un grupo de bytes. Para establecer la comunicación bidireccional entre un cliente y un servidor, realice los siguientes pasos:
- Creando el Programa del Servidor : Vamos a crear una clase llamada Server2.java para crear un servidor tal que el servidor reciba datos del cliente usando un objeto BufferedReader y luego envíe una respuesta al cliente usando un objeto PrintStream.
Servidor2.java
// Server2 class that
// receives data and sends data
import
java.io.*;
import
java.net.*;
class
Server2 {
public
static
void
main(String args[])
throws
Exception
{
// Create server Socket
ServerSocket ss =
new
ServerSocket(
888
);
// connect it to client socket
Socket s = ss.accept();
System.out.println(
"Connection established"
);
// to send data to the client
PrintStream ps
=
new
PrintStream(s.getOutputStream());
// to read data coming from the client
BufferedReader br
=
new
BufferedReader(
new
InputStreamReader(
s.getInputStream()));
// to read data from the keyboard
BufferedReader kb
=
new
BufferedReader(
new
InputStreamReader(System.in));
// server executes continuously
while
(
true
) {
String str, str1;
// repeat as long as the client
// does not send a null string
// read from client
while
((str = br.readLine()) !=
null
) {
System.out.println(str);
str1 = kb.readLine();
// send to client
ps.println(str1);
}
// close connection
ps.close();
br.close();
kb.close();
ss.close();
s.close();
// terminate application
System.exit(
0
);
}
// end of while
}
}
Comando para compilar el archivo Server2.Java :
D:\Conversation Program>javac Sever2.java
- Creación del programa cliente : vamos a crear un cliente, llamado Client2.Java , que primero se conecta a un servidor y luego inicia la comunicación enviando una string al servidor. El servidor envía una respuesta al cliente. Cuando se escribe ‘exit’ en el lado del cliente, el programa termina.
Cliente2.java
// Client2 class that
// sends data and receives also
import
java.io.*;
import
java.net.*;
class
Client2 {
public
static
void
main(String args[])
throws
Exception
{
// Create client socket
Socket s =
new
Socket(
"localhost"
,
888
);
// to send data to the server
DataOutputStream dos
=
new
DataOutputStream(
s.getOutputStream());
// to read data coming from the server
BufferedReader br
=
new
BufferedReader(
new
InputStreamReader(
s.getInputStream()));
// to read data from the keyboard
BufferedReader kb
=
new
BufferedReader(
new
InputStreamReader(System.in));
String str, str1;
// repeat as long as exit
// is not typed at client
while
(!(str = kb.readLine()).equals(
"exit"
)) {
// send to the server
dos.writeBytes(str +
"\n"
);
// receive from the server
str1 = br.readLine();
System.out.println(str1);
}
// close connection.
dos.close();
br.close();
kb.close();
s.close();
}
}
Comando para compilar el archivo Client2.java:
D:\Conversation Program>javac Client2.java
- Salida:
para ejecutar las clases Server2 y Client2 , ejecute Server2.java y Client2.java en dos ventanas del símbolo del sistema separadas. La figura 1 muestra el resultado de las clases Server2 y Client2:
- Creando el Programa del Servidor : Vamos a crear una clase llamada Server2.java para crear un servidor tal que el servidor reciba datos del cliente usando un objeto BufferedReader y luego envíe una respuesta al cliente usando un objeto PrintStream.
Publicación traducida automáticamente
Artículo escrito por aashrut123 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA