Простой калькулятор с использованием TCP в Java
Предварительные требования: Программирование сокетов на Java
Сеть просто не заканчивается односторонней связью между клиентом и сервером. Например, рассмотрим сервер, сообщающий время, который слушает запросы клиентов и отвечает клиенту с текущим временем. Приложения реального времени обычно используют модель «запрос-ответ» для связи.
Клиент обычно отправляет объект запроса на сервер, который после обработки запроса отправляет ответ обратно клиенту. Проще говоря, клиент запрашивает определенный ресурс, доступный на сервере, и сервер отвечает этому ресурсу, если он может проверить запрос. Например, когда вводится нажатие после ввода желаемого URL-адреса, запрос отправляется на соответствующий сервер, который затем отвечает, отправляя ответ в форме веб-страницы, которую браузеры могут отображать.
В этой статье реализовано простое приложение-калькулятор, в котором клиент будет отправлять запросы на сервер в форме простых арифметических уравнений, а сервер ответит ответом на уравнение.
Клиентское программирование
Шаги, выполняемые на стороне клиента, следующие:
- Откройте соединение сокета
- Коммуникация: В части коммуникации есть небольшое изменение. Отличие от предыдущей статьи заключается в использовании как входного, так и выходного потоков для отправки уравнений и получения результатов на сервер и от сервера соответственно. DataInputStream и DataOutputStream используются вместо базовых InputStream и OutputStream, чтобы сделать их машинно-независимыми. Используются следующие конструкторы -
- общедоступный DataInputStream (InputStream в)
Синтаксис: public DataInputStream (InputStream in) Параметры: in - базовый InputStream. Создает DataInputStream, который использует указанный базовый InputStream.
- общедоступный DataOutputStream (InputStream в)
Синтаксис: public DataOutputStream (OutputStream out) Параметры: out - лежащий в основе OutputStream. Создает DataOutputStream, который использует указанный базовый OutputStream.
После создания входных и выходных потоков мы используем readUTF и writeUTF методов созданных потоков для получения и отправки сообщения соответственно.
- общедоступная финальная строка readUTF ()
выбрасывает IOExceptionЧитает строку, закодированную в кодировке UTF8. Броски: IOException - поток был закрыт и содержащийся входной поток не поддерживает чтение после закрытия, или возникает другая ошибка ввода-вывода
- общедоступная конечная строка writeUTF ()
выбрасывает IOExceptionЗаписывает строку, закодированную с использованием кодировки UTF8. Броски: IOException - поток был закрыт и содержащийся входной поток не поддерживает чтение после закрытия, или возникает другая ошибка ввода-вывода
- общедоступный DataInputStream (InputStream в)
- Закрытие соединения.
Client Side Implementation
// 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); } } } |
Выход
Введите уравнение в форме: «операнд, оператор, операнд». 5 * 6 Ответ = 30 Введите уравнение в форме: «операнд, оператор, операнд». 5 + 6 Ответ = 11 Введите уравнение в форме: «операнд, оператор, операнд». 9/3 Ответ = 3
Серверное программирование
Действия, выполняемые на стороне сервера, следующие:
- Установите соединение через сокет.
- Обработка уравнений, поступающих от клиента: на стороне сервера мы также открываем как inputStream, так и outputStream. После получения уравнения мы обрабатываем его и возвращаем результат клиенту, записывая его в outputStream сокета.
- Закройте соединение.
Server Side Implementation
// 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)); } } } |
Выход:
Полученное уравнение: -5 * 6 Отправка результата ... Полученное уравнение: -5 + 6 Отправка результата ... Полученное уравнение: -9 / 3 Отправка результата ...
Примечание. Чтобы протестировать указанные выше программы в системе, убедитесь, что вы запускаете сначала серверную программу, а затем клиентскую. Убедитесь, что вы находитесь в клиентской консоли и оттуда введите уравнение в формате «операнд1, оператор, операнд2» и нажмите Enter. Ответ на запрошенное уравнение будет показан только в клиентской консоли. Наконец, чтобы завершить общение, введите «пока» (без кавычек) и нажмите Enter.
Связанная статья:
Простой калькулятор с использованием UDP в Java
Эта статья предоставлена Ришабом Марси . Если вам нравится GeeksforGeeks, и вы хотели бы внести свой вклад, вы также можете написать статью с помощью provide.geeksforgeeks.org или отправить ее по электронной почте на deposit@geeksforgeeks.org. Посмотрите, как ваша статья появляется на главной странице GeeksforGeeks, и помогите другим гикам.
Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсужденной выше.
Вниманию читателя! Не переставай учиться сейчас. Ознакомьтесь со всеми важными концепциями Java Foundation и коллекций с помощью курса "Основы Java и Java Collections" по доступной для студентов цене и будьте готовы к работе в отрасли. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .