logo

Eenvoudige rekenmachine met TCP in Java

Voorwaarde: Socketprogrammering in Java Netwerken eindigt niet met eenrichtingscommunicatie tussen de client en de server. Denk bijvoorbeeld aan een tijdwaarnemingsserver die luistert naar verzoeken van de clients en reageert met de huidige tijd op de client. Real-time toepassingen volgen doorgaans een verzoek-antwoordmodel voor communicatie. De client stuurt het verzoekobject doorgaans naar de server, die na verwerking van het verzoek het antwoord terugstuurt naar de client. In eenvoudige bewoordingen vraagt ​​de client om een ​​bepaalde bron die beschikbaar is op de server, en de server antwoordt op deze bron als hij het verzoek kan verifiëren. Wanneer bijvoorbeeld op Enter wordt gedrukt na het invoeren van de gewenste URL, wordt er een verzoek verzonden naar de corresponderende server, die vervolgens antwoordt door het antwoord te verzenden in de vorm van een webpagina die de browsers kunnen weergeven. In dit artikel wordt een eenvoudige rekenmachinetoepassing geïmplementeerd waarbij de client verzoeken naar de server stuurt in de vorm van eenvoudige rekenkundige vergelijkingen en de server antwoordt met het antwoord op de vergelijking.

Programmering aan de clientzijde

De stappen aan de klantzijde zijn als volgt:
  1. Open de stopcontactaansluiting
  2. Mededeling:Op het gebied van communicatie is er een kleine verandering. Het verschil met het vorige artikel ligt in het gebruik van zowel de invoer- als de uitvoerstromen om vergelijkingen te verzenden en de resultaten respectievelijk van en naar de server te ontvangen. DataInputStream En DataOutputStream worden gebruikt in plaats van de standaard InputStream en OutputStream om het machine-onafhankelijk te maken. De volgende constructors worden gebruikt -
      openbare DataInputStream(InputStream in)
        Syntax:   public DataInputStream(InputStream in)   Parameters:   in - The underlying InputStream. Creates a DataInputStream that uses the specified underlying InputStream.
      openbare DataOutputStream(InputStream in)
        Syntax:   public DataOutputStream(OutputStream out)   Parameters:   out - The underlying OutputStream. Creates a DataOutputStream that uses the specified underlying OutputStream.
    Na het maken van de invoer- en uitvoerstreams gebruiken we de readUTF en writeUTF van de gemaakte streamsmethoden om respectievelijk het bericht te ontvangen en te verzenden.
      public final String readUTF() genereert 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() genereert 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. De verbinding sluiten.

Implementatie aan de klantzijde

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

Programmering aan de serverzijde



De stappen aan de serverzijde zijn als volgt:
  1. Breng een stopcontactverbinding tot stand.
  2. Verwerk de vergelijkingen afkomstig van de klant:Aan de serverzijde openen we ook zowel de inputStream als de outputStream. Nadat we de vergelijking hebben ontvangen, verwerken we deze en sturen we het resultaat terug naar de klant door op de outputStream van de socket te schrijven.
  3. Sluit de verbinding.

Implementatie aan de serverzijde

gekoppelde lijst
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));  }  } } 
Uitgang:
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. Gerelateerd artikel: Eenvoudige rekenmachine met UDP in Java Quiz maken