首頁 >Java >java教程 >使用Java透過UDP實作簡單計算器 在Java中使用UDP實作一個簡單的計算器

使用Java透過UDP實作簡單計算器 在Java中使用UDP實作一個簡單的計算器

王林
王林轉載
2023-08-27 21:33:021122瀏覽

使用Java通过UDP实现简单计算器

在Java中使用UDP实现一个简单的计算器

網際網路協定套件包含所有類型的協議,使裝置之間能夠透過網際網路進行通訊。 UDP 是該套件的協定之一,其完整形式是用戶資料報協定。與 TCP 不同,它不可靠,而且是無連線協定。在發送資料之前,它不會與其他裝置建立任何類型的連線。

在本文中,我們將使用 Java 中的 UDP 開發一個簡單的客戶端伺服器端計算器。客戶端請求操作,伺服器計算後將結果傳送給客戶端設備。

Java 網路

讓我們先簡單了解一些關於Java網路的基本概念−

Inet位址

IP位址是一個32位元或128位元的無符號數字,用於唯一標識網路上的裝置。記住IP主機的名稱比記住數字位址更容易。因此,我們需要使用"InetAddress"類別來封裝它。我們使用它內建的方法"getLocalHost()"來取得本地主機的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連接,然後取得本機主機位址。

  • 現在,在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中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除