網際網路協定套件包含所有類型的協議,使裝置之間能夠透過網際網路進行通訊。 UDP 是該套件的協定之一,其完整形式是用戶資料報協定。與 TCP 不同,它不可靠,而且是無連線協定。在發送資料之前,它不會與其他裝置建立任何類型的連線。
在本文中,我們將使用 Java 中的 UDP 開發一個簡單的客戶端伺服器端計算器。客戶端請求操作,伺服器計算後將結果傳送給客戶端設備。
讓我們先簡單了解一些關於Java網路的基本概念−
IP位址是一個32位元或128位元的無符號數字,用於唯一標識網路上的裝置。記住IP主機的名稱比記住數字位址更容易。因此,我們需要使用"InetAddress"類別來封裝它。我們使用它內建的方法"getLocalHost()"來取得本地主機的IP位址。
它們是小型資料包,包含可以透過網路在兩台機器之間傳遞的資料。 Java實作兩個類別來建立UDP連線 -
DatagramSocket類別用於傳送和接收資料封包。它還確定這些包的目的地。它內建的方法‘send()’和‘receive()’分別用於傳送和接收封包。
DatagramSocket nameOfObject = new DatagramSocket();
DatagramPacket類別的物件儲存要傳送的資料。
DatagramPacket nameOfPacket = new DatagramPacket();
我們首先導入兩個最重要的包,名為'java.net',用於存取與Java網路相關的所有類,以及'java.io' ,用於輸入和輸出流。使用‘java.util’套件來使用‘Scanner’類別。
建立一個UDP連接,然後取得本機主機位址。
現在,在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時,連線將被終止,程式將停止執行。
在本文中,我們了解了 Java 網路的一些基本概念。此外,我們也討論了使用 UDP 的簡單計算器的伺服器端和用戶端程式。我們發現如何用 Java 在客戶端和伺服器設備之間建立連線。
以上是使用Java透過UDP實作簡單計算器 在Java中使用UDP實作一個簡單的計算器的詳細內容。更多資訊請關注PHP中文網其他相關文章!