Java UDP 简单计算器


互联网协议套件包含各种协议,这些协议使设备能够通过互联网进行通信。UDP 是此套件中的一个协议,其全称是用户数据报协议。与 TCP 不同,它不可靠,并且它是一个无连接协议。在发送数据之前,它不会与其他设备建立任何连接。

在本文中,我们将使用 Java 中的 UDP 开发一个简单的客户端-服务器端计算器。客户端将请求操作,服务器将在计算后将结果发送到客户端设备。

Java 网络编程

让我们首先简要了解一些关于 Java 网络编程的基本概念。

InetAddress

IP 地址是一个 32 位或 128 位无符号数字,用于唯一标识互联网上的设备。记住 IP 主机的名称比记住数字地址容易。因此,我们需要使用“InetAddress”类对其进行封装。我们使用其内置方法“getLcalHost()”来检索 LocalHost 的 IP 地址。

数据报

它们是包含数据的小型数据包,可以通过互联网在两台机器之间传递。Java 实现两个类来建立 UDP 连接:

DatagramSocket 类用于发送和接收数据报包。它还确定这些数据包的目标。其内置方法“send()”“receive()”分别用于发送和接收数据包。

语法

DatagramSocket nameOfObject = new DatagramSocket();

DatagramPacket 类的对象存储要发送的数据。

语法

DatagramPacket nameOfPacket = new DatagramPacket();

使用 UDP 的计算器程序

客户端程序

代码工作原理

  • 我们首先导入两个最重要的包,名为“java.net”以访问所有关于 Java 网络编程的类,以及“java.io”用于输入和输出流。“java.util”包用于使用“Scanner”类。

  • 建立 UDP 连接,然后获取 LocalHost 地址。

  • 现在,在 try 块内,我们将要求用户输入以请求操作并相应地接收结果。这将通过“DatagramSocket”类的“send()”和“receive()”方法完成。

import java.io.*; import java.net.*; import java.util.*; public class ClientCalc { public static void main(String args[]) throws IOException { Scanner inp = new Scanner(System.in); // making UDP connection DatagramSocket datagsokt = new DatagramSocket(); // fetching the localhost address InetAddress addr = InetAddress.getLocalHost(); byte strm[] = null; try { while (true) { System.out.println("Type 1 for Addition"); System.out.println("Type 2 for Subtraction"); System.out.println("Type 3 for Multiplication"); System.out.println("Type 4 for Division"); System.out.println("Enter your choice: "); String oprtr = inp.nextLine(); // to convert the user choice to byte strm = new byte[256]; strm = oprtr.getBytes(); // creating datagram packet to send to server DatagramPacket packtsend = new DatagramPacket(strm, strm.length, addr, 6666); datagsokt.send(packtsend); // Type 0 for cut the connection if (oprtr.equals("0")) { break; } // to receive the result from server strm = new byte[256]; DatagramPacket packtrec = new DatagramPacket(strm, strm.length); datagsokt.receive(packtrec); // display the result System.out.println("Your Result for the given operation = " + new String(strm, 0, strm.length)); } } // to handle exception catch(Exception exp) { System.out.println(exp); } } }

服务器端程序

代码工作原理

  • 首先,与客户端建立连接,并定义两个 DatagramPacket 类对象,以使用“DatagramSocket”类的“send()”和“receive()”方法发送和接收数据包。

  • 在 try 块内,我们接收来自客户端的请求,然后使用 switch case 执行操作并将结果发送到客户端设备。

示例

import java.io.*; import java.net.*; class ServerCalc { public static void main(String[] args) throws IOException { // making connection to client DatagramSocket datagsokt = new DatagramSocket(6666); byte[] strm = null; DatagramPacket packtrec = null; DatagramPacket packtsend = null; try { while (true) { strm = new byte[256]; // to receive the packet from client packtrec = new DatagramPacket(strm, strm.length); datagsokt.receive(packtrec); String oprtr = new String(strm, 0, strm.length); System.out.println("Client has requested for " + oprtr ); int data1 = 15; int data2 = 5; int tot = 0; char opt = oprtr.charAt(0); switch(opt) { case '1' : tot = data1 + data2; break; case '2' : tot = data1 - data2; break; case '3' : tot = data1 * data2; break; case '4' : tot = data1 / data2; break; default : break; } // Converting the string result to integer String res = Integer.toString(tot); // converting the integer to bytes strm = res.getBytes(); int port = packtrec.getPort(); // getting port number // sending final result in the form of datagram packet packtsend = new DatagramPacket(strm, strm.length, InetAddress.getLocalHost(), port); datagsokt.send(packtsend); } } // to handle exception catch(Exception exp) { System.out.println(exp); } } }

要运行这两个程序,请在本地计算机上同时打开两个 cmd 窗口。在第一个 cmd 界面上,编译并运行服务器端程序,然后在另一个界面上执行客户端程序。

客户端输出

D:\Java Programs>java ClientCalc
Type 1 for Addition
Type 2 for Subtraction
Type 3 for Multiplication
Type 4 for Division
Enter your choice:
1
Your Result for the given operation = 20  

服务器端输出

D:\Java Programs>java ServerCalc
Client has requested for 1  

当我们输入 0 时,连接将终止,程序将停止执行。

Learn Java in-depth with real-world projects through our Java certification course. Enroll and become a certified expert to boost your career.

结论

在本文中,我们学习了 Java 网络编程的一些基本概念。此外,我们讨论了使用 UDP 的简单计算器的服务器端和客户端程序。我们了解了如何在 Java 中建立客户端和服务器设备之间的连接。

更新于: 2023年5月16日

490 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告