logo

Simpel lommeregner ved hjælp af TCP i Java

Forudsætning: Socket-programmering i Java Netværk slutter bare ikke med en envejskommunikation mellem klienten og serveren. Overvej f.eks. en tidsregistrerende server, som lytter til klienternes anmodning og svarer med det aktuelle tidspunkt til klienten. Realtidsapplikationer følger normalt en anmodning-svar-model for kommunikation. Klienten sender normalt anmodningsobjektet til serveren, som efter behandling af anmodningen sender svaret tilbage til klienten. Enkelt sagt anmoder klienten om en bestemt ressource, der er tilgængelig på serveren, og serveren svarer den ressource, hvis den kan verificere anmodningen. For eksempel når der trykkes på enter efter indtastning af den ønskede url, sendes en anmodning til den tilsvarende server, som derefter svarer ved at sende svaret i form af en webside, som browserne er i stand til at vise. I denne artikel implementeres en simpel regnemaskineapplikation, hvor klienten sender anmodninger til serveren i form af simple aritmetiske ligninger, og serveren vil svare tilbage med svaret på ligningen.

Programmering på klientsiden

De involverede trin på klientsiden er som følger-
  1. Åbn stikkontakten
  2. Meddelelse:I kommunikationsdelen er der en lille ændring. Forskellen med den forrige artikel ligger i brugen af ​​både input- og outputstrømmene til at sende ligninger og modtage resultaterne til og fra serveren. DataInputStream og DataOutputStream bruges i stedet for grundlæggende InputStream og OutputStream for at gøre det maskinuafhængigt. Følgende konstruktører bruges -
      offentlig DataInputStream(InputStream in)
        Syntax:   public DataInputStream(InputStream in)   Parameters:   in - The underlying InputStream. Creates a DataInputStream that uses the specified underlying InputStream.
      offentlig DataOutputStream(InputStream in)
        Syntax:   public DataOutputStream(OutputStream out)   Parameters:   out - The underlying OutputStream. Creates a DataOutputStream that uses the specified underlying OutputStream.
    Efter at have oprettet input- og outputstrømmene bruger vi readUTF og writeUTF for de oprettede streams-metoder til at modtage og sende beskeden hhv.
      public final String readUTF() kaster 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() kaster 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. Lukning af forbindelsen.

Implementering på klientsiden

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);  }  } } 
Produktion
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 

Server-side programmering



De involverede trin på serversiden er som følger-
  1. Etabler en stikkontakt.
  2. Bearbejd ligningerne fra klienten:På serversiden åbner vi også både inputStream og outputStream. Efter at have modtaget ligningen behandler vi den og returnerer resultatet tilbage til klienten ved at skrive på outputStream af socket.
  3. Luk forbindelsen.

Server Side Implementering

solrig deol alder
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));  }  } } 
Produktion:
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. Relateret artikel: Simpel lommeregner ved hjælp af UDP i Java Opret quiz