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 時,連線將終止,程式將停止執行。
結論
在本文中,我們學習了 Java 網路程式設計的一些基本概念。此外,我們討論了使用 UDP 的簡單計算器的伺服器端和客戶端程式。我們瞭解瞭如何在 Java 中建立客戶端和伺服器裝置之間的連線。
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP