logo

Прост калкулатор, използващ TCP в Java

Предпоставка: Програмиране на сокет в Java Работата в мрежа просто не завършва с еднопосочна комуникация между клиент и сървър. Например помислете за сървър за разказване на времето, който слуша заявката на клиентите и отговаря с текущото време на клиента. Приложенията в реално време обикновено следват модел заявка-отговор за комуникация. Клиентът обикновено изпраща обекта на заявката до сървъра, който след обработка на заявката изпраща отговора обратно на клиента. Казано по-просто, клиентът иска конкретен ресурс, наличен на сървъра, и сървърът му отговаря, ако може да потвърди заявката. Например, когато се натисне enter след въвеждане на желания url, се изпраща заявка до съответния сървър, който след това отговаря, като изпраща отговор под формата на уеб страница, която браузърите могат да показват. В тази статия е внедрено просто приложение за калкулатор, при което клиентът ще изпраща заявки до сървъра под формата на прости аритметични уравнения и сървърът ще отговаря обратно с отговора на уравнението.

Програмиране от страна на клиента

Стъпките, включени от страна на клиента, са както следва-
  1. Отворете връзката на гнездото
  2. Комуникация:В комуникационната част има лека промяна. Разликата с предишната статия е в използването както на входния, така и на изходния поток за изпращане на уравнения и получаване на резултатите съответно към и от сървъра. DataInputStream и DataOutputStream се използват вместо основния InputStream и OutputStream, за да го направят машинно независим. Използват се следните конструктори -
      публичен DataInputStream(InputStream в)
        Syntax:   public DataInputStream(InputStream in)   Parameters:   in - The underlying InputStream. Creates a DataInputStream that uses the specified underlying InputStream.
      публичен DataOutputStream(InputStream в)
        Syntax:   public DataOutputStream(OutputStream out)   Parameters:   out - The underlying OutputStream. Creates a DataOutputStream that uses the specified underlying OutputStream.
    След създаването на входните и изходните потоци ние използваме методите readUTF и writeUTF на създадените потоци, за да получим и изпратим съответно съобщението.
      public final String readUTF() хвърля 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() хвърля 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. Затваряне на връзката.

Внедряване от страна на клиента

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);  }  } } 
Изход
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 

Програмиране от страната на сървъра



Стъпките, включени от страна на сървъра, са както следва-
  1. Установете връзка с гнездо.
  2. Обработете уравненията, идващи от клиента:От страната на сървъра също отваряме както inputStream, така и outputStream. След като получим уравнението, ние го обработваме и връщаме резултата обратно на клиента, като пишем в outputStream на сокета.
  3. Затворете връзката.

Внедряване от страна на сървъра

кодиращ код на Хъфман
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));  }  } } 
Изход:
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. Свързана статия: Прост калкулатор, използващ UDP в Java Създаване на тест