logo

Enkel kalkulator med TCP i Java

Forutsetning: Socket-programmering i Java Nettverk avsluttes bare ikke med en enveiskommunikasjon mellom klienten og serveren. Tenk for eksempel på en tidsangivende server som lytter til forespørselen fra klientene og svarer med gjeldende tid til klienten. Sanntidsapplikasjoner følger vanligvis en forespørsel-svar-modell for kommunikasjon. Klienten sender vanligvis forespørselsobjektet til serveren som etter behandling av forespørselen sender svaret tilbake til klienten. Enkelt sagt ber klienten om en bestemt ressurs som er tilgjengelig på serveren, og serveren svarer på ressursen hvis den kan bekrefte forespørselen. For eksempel når enter trykkes etter å ha skrevet inn ønsket url, sendes en forespørsel til den korresponderende serveren som deretter svarer ved å sende svaret i form av en nettside som nettleserne er i stand til å vise. I denne artikkelen er en enkel kalkulatorapplikasjon implementert der klienten vil sende forespørsler til serveren i form av enkle aritmetiske ligninger og serveren vil svare tilbake med svaret på ligningen.

Programmering på klientsiden

Trinnene involvert på klientsiden er som følger-
  1. Åpne stikkontakten
  2. Kommunikasjon:I kommunikasjonsdelen er det en liten endring. Forskjellen med den forrige artikkelen ligger i bruken av både input- og output-strømmene for å sende ligninger og motta resultatene til og fra serveren. DataInputStream og DataOutputStream brukes i stedet for grunnleggende InputStream og OutputStream for å gjøre den maskinuavhengig. Følgende konstruktører brukes -
      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.
    Etter å ha opprettet inngangs- og utdatastrømmene bruker vi readUTF og writeUTF for de opprettede strømmemetodene for å motta og sende meldingen henholdsvis.
      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. Lukking av 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);  }  } } 
Produksjon
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 på serversiden



Trinnene involvert på serversiden er som følger-
  1. Etabler en stikkontakt.
  2. Behandle ligningene som kommer fra klienten:På serversiden åpner vi også både inputStream og outputStream. Etter å ha mottatt ligningen behandler vi den og returnerer resultatet tilbake til klienten ved å skrive på outputStream av socket.
  3. Lukk tilkoblingen.

Implementering på serversiden

solfylt 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));  }  } } 
Produksjon:
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. Relatert artikkel: Enkel kalkulator som bruker UDP i Java Lag quiz