logo

Calcolatrice semplice che utilizza TCP in Java

Prerequisito: Programmazione socket in Java La rete semplicemente non si conclude con una comunicazione unidirezionale tra client e server. Ad esempio, considera un server che indica l'ora che ascolta le richieste dei client e risponde con l'ora corrente al client. Le applicazioni in tempo reale di solito seguono un modello di richiesta-risposta per la comunicazione. Il client solitamente invia l'oggetto della richiesta al server che, dopo aver elaborato la richiesta, invia la risposta al client. In termini semplici, il client richiede una particolare risorsa disponibile sul server e il server risponde alla risorsa se può verificare la richiesta. Ad esempio, quando si preme Invio dopo aver inserito l'URL desiderato, viene inviata una richiesta al server corrispondente che poi risponde inviando la risposta sotto forma di una pagina Web che i browser sono in grado di visualizzare. In questo articolo viene implementata una semplice applicazione di calcolo in cui il client invierà richieste al server sotto forma di semplici equazioni aritmetiche e il server risponderà con la risposta all'equazione.

Programmazione lato client

I passaggi coinvolti sul lato client sono i seguenti:
  1. Aprire la connessione presa
  2. Comunicazione:Nella parte di comunicazione c'è un leggero cambiamento. La differenza con l'articolo precedente risiede nell'utilizzo dei flussi di input e output per inviare equazioni e ricevere i risultati rispettivamente da e verso il server. DatiInputStream E DataOutputStream vengono utilizzati al posto di InputStream e OutputStream di base per renderlo indipendente dalla macchina. Vengono utilizzati i seguenti costruttori:
      pubblico DataInputStream(InputStream in)
        Syntax:   public DataInputStream(InputStream in)   Parameters:   in - The underlying InputStream. Creates a DataInputStream that uses the specified underlying InputStream.
      pubblico DataOutputStream(InputStream in)
        Syntax:   public DataOutputStream(OutputStream out)   Parameters:   out - The underlying OutputStream. Creates a DataOutputStream that uses the specified underlying OutputStream.
    Dopo aver creato i flussi di input e output, utilizziamo i metodi readUTF e writeUTF dei flussi creati rispettivamente per ricevere e inviare il messaggio.
      public final String readUTF() genera IOException
      Reads the string encoded using UTF8 encoding.   Throws:   IOException - the stream has been closed and the contained input stream does not support reading after close or another I/O error occurs 
      public final String writeUTF() genera IOException
      Writes the string encoded using UTF8 encoding.   Throws:   IOException - the stream has been closed and the contained input stream does not support reading after close or another I/O error occurs 
  3. Chiusura della connessione.

Implementazione lato client

Java
// Java program to illustrate Client Side Programming // for Simple Calculator using TCP import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; import java.util.Scanner; public class Calc_Client {  public static void main(String[] args) throws IOException  {  InetAddress ip = InetAddress.getLocalHost();  int port = 4444;  Scanner sc = new Scanner(System.in);  // Step 1: Open the socket connection.  Socket s = new Socket(ip port);  // Step 2: Communication-get the input and output stream  DataInputStream dis = new DataInputStream(s.getInputStream());  DataOutputStream dos = new DataOutputStream(s.getOutputStream());  while (true)  {  // Enter the equation in the form-  // 'operand1 operation operand2'  System.out.print('Enter the equation in the form: ');  System.out.println(''operand operator operand'');  String inp = sc.nextLine();  if (inp.equals('bye'))  break;  // send the equation to server  dos.writeUTF(inp);  // wait till request is processed and sent back to client  String ans = dis.readUTF();  System.out.println('Answer=' + ans);  }  } } 
Produzione
Enter the equation in the form: 'operand operator operand' 5 * 6 Answer=30 Enter the equation in the form: 'operand operator operand' 5 + 6 Answer=11 Enter the equation in the form: 'operand operator operand' 9 / 3 Answer=3 

Programmazione lato server



I passaggi coinvolti sul lato server sono i seguenti:
  1. Stabilire una connessione socket.
  2. Elabora le equazioni provenienti dal cliente:Anche sul lato server apriamo sia inputStream che outputStream. Dopo aver ricevuto l'equazione la elaboriamo e restituiamo il risultato al client scrivendo sull'outputStream del socket.
  3. Chiudi la connessione.

Implementazione lato server

Shreya Ghoshal
Java
// Java program to illustrate Server Side Programming // for Simple Calculator using TCP import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import java.util.StringTokenizer; public class Calc_Server {  public static void main(String args[]) throws IOException  {  // Step 1: Establish the socket connection.  ServerSocket ss = new ServerSocket(4444);  Socket s = ss.accept();  // Step 2: Processing the request.  DataInputStream dis = new DataInputStream(s.getInputStream());  DataOutputStream dos = new DataOutputStream(s.getOutputStream());  while (true)  {  // wait for input  String input = dis.readUTF();  if(input.equals('bye'))  break;  System.out.println('Equation received:-' + input);  int result;  // Use StringTokenizer to break the equation into operand and  // operation  StringTokenizer st = new StringTokenizer(input);  int oprnd1 = Integer.parseInt(st.nextToken());  String operation = st.nextToken();  int oprnd2 = Integer.parseInt(st.nextToken());  // perform the required operation.  if (operation.equals('+'))  {  result = oprnd1 + oprnd2;  }  else if (operation.equals('-'))  {  result = oprnd1 - oprnd2;  }  else if (operation.equals('*'))  {  result = oprnd1 * oprnd2;  }  else  {  result = oprnd1 / oprnd2;  }  System.out.println('Sending the result...');  // send the result back to the client.  dos.writeUTF(Integer.toString(result));  }  } } 
Produzione:
Equation received:-5 * 6 Sending the result... Equation received:-5 + 6 Sending the result... Equation received:-9 / 3 Sending the result... 
Note: In order to test the above programs on the system please make sure that you run the server program first and then the client one. Make sure you are in the client console and from there enter the equation in the format-'operand1 operator operand2' and press Enter. Answer to the requested equation will be shown in the client console only. Finally to terminate the communication type 'bye' (without quotes) and hit enter. Articolo correlato: Calcolatrice semplice che utilizza UDP in Java Crea quiz