logo

Vienkāršs kalkulators, izmantojot TCP Java

Priekšnosacījums: Socket programmēšana Java Tīkla izveide vienkārši nenoslēdzas ar vienvirziena saziņu starp klientu un serveri. Piemēram, apsveriet laika noteikšanas serveri, kas klausās klientu pieprasījumu un atbild klientam ar pašreizējo laiku. Reāllaika lietojumprogrammas saziņai parasti izmanto pieprasījuma-atbildes modeli. Klients parasti nosūta pieprasījuma objektu serverim, kas pēc pieprasījuma apstrādes nosūta atbildi atpakaļ klientam. Vienkārši izsakoties, klients pieprasa konkrētu serverī pieejamo resursu, un serveris atbild uz to, ja tas var pārbaudīt pieprasījumu. Piemēram, ja pēc vēlamā URL ievadīšanas tiek nospiests enter, pieprasījums tiek nosūtīts uz atbilstošo serveri, kas pēc tam atbild, nosūtot atbildi tīmekļa lapas veidā, kuru pārlūkprogrammas spēj parādīt. Šajā rakstā ir ieviesta vienkārša kalkulatora lietojumprogramma, kurā klients nosūtīs pieprasījumus serverim vienkāršu aritmētisku vienādojumu veidā un serveris atbildēs ar atbildi uz vienādojumu.

Klienta puses programmēšana

Klienta pusē iesaistītās darbības ir šādas:
  1. Atveriet kontaktligzdas savienojumu
  2. Saziņa:Komunikācijas daļā ir nelielas izmaiņas. Atšķirība no iepriekšējā raksta ir gan ievades, gan izvades straumes izmantošanā, lai nosūtītu vienādojumus un saņemtu rezultātus attiecīgi uz serveri un no tā. DataInputStream un DataOutputStream tiek izmantoti pamata InputStream un OutputStream vietā, lai padarītu to neatkarīgu no mašīnas. Tiek izmantoti šādi konstruktori -
      publiska DataInputStream (InputStream in)
        Syntax:   public DataInputStream(InputStream in)   Parameters:   in - The underlying InputStream. Creates a DataInputStream that uses the specified underlying InputStream.
      publiska DataOutputStream (InputStream in)
        Syntax:   public DataOutputStream(OutputStream out)   Parameters:   out - The underlying OutputStream. Creates a DataOutputStream that uses the specified underlying OutputStream.
    Pēc ievades un izvades straumju izveidošanas mēs izmantojam izveidoto straumju metodes readUTF un writeUTF, lai attiecīgi saņemtu un nosūtītu ziņojumu.
      public final String readUTF() izmet 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 
      publiskais galīgais Virkne writeUTF() izmet 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. Savienojuma slēgšana.

Klienta puses ieviešana

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

Servera puses programmēšana



Servera pusē iesaistītās darbības ir šādas:
  1. Izveidojiet kontaktligzdas savienojumu.
  2. Apstrādājiet no klienta saņemtos vienādojumus:Arī servera pusē mēs atveram gan inputStream, gan outputStream. Pēc vienādojuma saņemšanas mēs to apstrādājam un atgriežam rezultātu atpakaļ klientam, ierakstot ligzdas outputStream.
  3. Aizveriet savienojumu.

Servera puses ieviešana

salīdziniet java virkni
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));  }  } } 
Izvade:
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. Saistīts raksts: Vienkāršs kalkulators, izmantojot UDP Java Izveidojiet viktorīnu