logo

Calculator simplu folosind TCP în Java

Condiție preliminară: Programare socket în Java Rețeaua pur și simplu nu se încheie cu o comunicare unidirecțională între client și server. De exemplu, luați în considerare un server care spune timpul care ascultă cererea clienților și răspunde cu ora curentă clientului. Aplicațiile în timp real urmează de obicei un model cerere-răspuns pentru comunicare. Clientul trimite de obicei obiectul de solicitare către server care, după procesarea cererii, trimite răspunsul înapoi clientului. În termeni simpli, clientul solicită o anumită resursă disponibilă pe server și serverul răspunde resursei acesteia dacă poate verifica cererea. De exemplu, când se apasă enter după introducerea adresei URL dorite, o solicitare este trimisă la serverul corespunzător care apoi răspunde prin trimiterea răspunsului sub forma unei pagini web pe care browserele sunt capabile să o afișeze. În acest articol este implementată o aplicație de calculator simplă în care clientul va trimite cereri către server sub formă de ecuații aritmetice simple, iar serverul va răspunde cu răspunsul la ecuație.

Programare pe partea clientului

Pașii implicați din partea clientului sunt următorii:
  1. Deschideți priza
  2. Comunicare:În partea de comunicare există o ușoară schimbare. Diferența față de articolul anterior constă în utilizarea atât a fluxurilor de intrare, cât și a fluxurilor de ieșire pentru a trimite ecuații și, respectiv, a primi rezultatele către și de la server. DataInputStream şi DataOutputStream sunt utilizate în locul InputStream și OutputStream de bază pentru a-l face independent de mașină. Sunt utilizați următorii constructori -
      public DataInputStream(InputStream in)
        Syntax:   public DataInputStream(InputStream in)   Parameters:   in - The underlying InputStream. Creates a DataInputStream that uses the specified underlying InputStream.
      public DataOutputStream(InputStream in)
        Syntax:   public DataOutputStream(OutputStream out)   Parameters:   out - The underlying OutputStream. Creates a DataOutputStream that uses the specified underlying OutputStream.
    După crearea fluxurilor de intrare și de ieșire, folosim metodele readUTF și writeUTF ale fluxurilor create pentru a primi și, respectiv, a trimite mesajul.
      public final String readUTF() aruncă 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() aruncă 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. Închiderea conexiunii.

Implementare pe partea clientului

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);  }  } } 
Ieșire
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 

Programare pe partea serverului



Pașii implicați pe partea serverului sunt următorii:
  1. Stabiliți o conexiune la priză.
  2. Procesați ecuațiile venite de la client:În partea serverului deschidem atât inputStream, cât și outputStream. După ce primim ecuația, o procesăm și returnăm rezultatul înapoi către client, scriind pe outputStream al socket-ului.
  3. Închideți conexiunea.

Implementare pe partea serverului

aws sns
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));  }  } } 
Ieșire:
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. Articol înrudit: Calculator simplu folosind UDP în Java Creați un test