logo

Paprastas skaičiuotuvas naudojant TCP Java

Būtina sąlyga: Socket programavimas Java Tinklo kūrimas nesibaigia vienpusiu ryšiu tarp kliento ir serverio. Pavyzdžiui, apsvarstykite laiko nustatymo serverį, kuris išklauso klientų užklausas ir atsako klientui esamu laiku. Realaus laiko programos paprastai laikosi užklausos-atsakymo modelio bendravimui. Klientas paprastai siunčia užklausos objektą į serverį, kuris, apdorojęs užklausą, siunčia atsakymą atgal klientui. Paprastais žodžiais tariant, klientas prašo tam tikro resurso, esančio serveryje, o serveris atsako į jį, jei gali patvirtinti užklausą. Pavyzdžiui, kai įvedus norimą URL paspaudžiamas enter, atitinkamam serveriui siunčiama užklausa, kuri tada atsako išsiųsdama atsakymą tinklalapio, kurį naršyklės gali rodyti, forma. Šiame straipsnyje yra įdiegta paprasta skaičiuoklės programa, kurioje klientas siųs užklausas serveriui paprastų aritmetinių lygčių forma, o serveris atsakys atsakydamas į lygtį.

Kliento pusės programavimas

Kliento pusės veiksmai yra tokie:
  1. Atidarykite lizdo jungtį
  2. Bendravimas:Komunikacijos dalyje šiek tiek pasikeitė. Skirtumas nuo ankstesnio straipsnio yra įvesties ir išvesties srautų naudojimas siunčiant lygtis ir gaunant rezultatus atitinkamai į serverį ir iš jo. DataInputStream ir DataOutputStream naudojami vietoj pagrindinių „InputStream“ ir „OutputStream“, kad jis būtų nepriklausomas nuo įrenginio. Naudojami šie konstruktoriai -
      viešas DataInputStream (InputStream in)
        Syntax:   public DataInputStream(InputStream in)   Parameters:   in - The underlying InputStream. Creates a DataInputStream that uses the specified underlying InputStream.
      viešas duomenų išvesties srautas (įvesties srautas)
        Syntax:   public DataOutputStream(OutputStream out)   Parameters:   out - The underlying OutputStream. Creates a DataOutputStream that uses the specified underlying OutputStream.
    Sukūrę įvesties ir išvesties srautus, mes naudojame sukurtų srautų metodus readUTF ir writeUTF, kad gautume ir išsiųstume pranešimą.
      vieša galutinė eilutė readUTF() meta 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 
      viešas galutinis Eilutė writeUTF() meta 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. Ryšio nutraukimas.

Kliento pusės įgyvendinimas

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);  }  } } 
Išvestis
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 

Serverio pusės programavimas



Veiksmai serverio pusėje yra tokie:
  1. Sujunkite kištukinį lizdą.
  2. Apdorokite lygtis, gaunamas iš kliento:Serverio pusėje taip pat atidarome ir inputStream, ir outputStream. Gavę lygtį, ją apdorojame ir grąžiname rezultatą klientui, įrašydami į lizdo outputStream.
  3. Uždarykite ryšį.

Serverio pusės diegimas

formato java eilutė
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));  }  } } 
Išvestis:
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. Susijęs straipsnis: Paprastas skaičiuotuvas naudojant UDP Java Sukurti viktoriną