logo

Jednoduchá kalkulačka využívající TCP v Javě

Předpoklad: Soketové programování v Javě Síťová komunikace nekončí pouze jednosměrnou komunikací mezi klientem a serverem. Vezměme si například server pro sledování času, který naslouchá požadavkům klientů a odpovídá klientovi aktuálním časem. Aplikace v reálném čase se obvykle při komunikaci řídí modelem žádost-odpověď. Klient obvykle odešle objekt požadavku na server, který po zpracování požadavku odešle odpověď zpět klientovi. Jednoduše řečeno, klient požaduje konkrétní zdroj dostupný na serveru a server na něj odpoví, pokud může požadavek ověřit. Například, když se po zadání požadované adresy URL stiskne enter, odešle se požadavek na příslušný server, který poté odpoví odesláním odpovědi ve formě webové stránky, kterou jsou prohlížeče schopny zobrazit. V tomto článku je implementována jednoduchá aplikace kalkulátoru, kde klient odešle na server požadavky ve formě jednoduchých aritmetických rovnic a server odpoví odpovědí na rovnici.

Programování na straně klienta

Kroky na straně klienta jsou následující:
  1. Otevřete připojení zásuvky
  2. Sdělení:V komunikační části dochází k mírné změně. Rozdíl oproti předchozímu článku spočívá v použití vstupního i výstupního toku k odesílání rovnic a přijímání výsledků na server a ze serveru. DataInputStream a DataOutputStream se používají místo základních InputStream a OutputStream, aby byly na stroji nezávislé. Používají se následující konstruktory -
      veřejný DataInputStream (InputStream in)
        Syntax:   public DataInputStream(InputStream in)   Parameters:   in - The underlying InputStream. Creates a DataInputStream that uses the specified underlying InputStream.
      veřejný DataOutputStream (InputStream in)
        Syntax:   public DataOutputStream(OutputStream out)   Parameters:   out - The underlying OutputStream. Creates a DataOutputStream that uses the specified underlying OutputStream.
    Po vytvoření vstupního a výstupního toku použijeme readUTF a writeUTF metod vytvořených toků pro příjem a odeslání zprávy.
      public final String readUTF() vyvolá 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() vyvolá 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. Uzavření spojení.

Implementace na straně klienta

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);  }  } } 
Výstup
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 

Programování na straně serveru



Kroky na straně serveru jsou následující -
  1. Vytvořte zásuvkové připojení.
  2. Zpracujte rovnice přicházející od klienta:Na straně serveru také otevíráme jak inputStream, tak outputStream. Po obdržení rovnice ji zpracujeme a vrátíme výsledek zpět klientovi zápisem na outputStream soketu.
  3. Uzavřete spojení.

Implementace na straně serveru

alternativa mylivecricket
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));  }  } } 
výstup:
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. Související článek: Jednoduchá kalkulačka využívající UDP v Javě Vytvořit kvíz