1 import java.rmi.*;
2 import java.net.*;
3 import java.rmi.registry.LocateRegistry;
4 import java.rmi.registry.Registry;
5
6 public class MyMathClient
7 {
8 public static void main(String[] args)
9 {
10 if (args.length == 0)
11 {
12 System.err.println("Usage java MyMathClient <server-hostname>");
13 }
14 try
15 {
16 Registry registry = LocateRegistry.getRegistry(args[0]);
17 MyMath stub = (MyMath) registry.lookup("MyMathServer");
18 System.out.println(stub.add(3,2));
19
20 }
21 catch (Exception e)
22 {
23 System.err.println("System Exception" + e);
24 }
25 }
26 }
3 import java.rmi.registry.LocateRegistry;
4 import java.rmi.registry.Registry;
5
6 public class MyMathClient
7 {
8 public static void main(String[] args)
9 {
10 if (args.length == 0)
11 {
12 System.err.println("Usage java MyMathClient <server-hostname>");
13 }
14 try
15 {
16 Registry registry = LocateRegistry.getRegistry(args[0]);
17 MyMath stub = (MyMath) registry.lookup("MyMathServer");
18 System.out.println(stub.add(3,2));
19
20 }
21 catch (Exception e)
22 {
23 System.err.println("System Exception" + e);
24 }
25 }
26 }
จากโปรแกรมในบรรทัดที่ 16 เป็นการค้นหาอาร์เอ็มไอรีจิสตรี (RMI registry) ในเครื่องที่อ็อบเจกต์เซิร์ฟเวอร์รันอยู่ เราจะรันโปรแกรมนี้โดยระบุชื่อเครื่องเซิร์ฟเวอร์มาเป็นพารามิเตอร์บรรทัดคำสั่ง (command line parameter) และส่งชื่อเครื่องเซิร์ฟเวอร์นี้ให้กับเมท็อด getRegistry() บรรทัดที่ 17 ค้นหาอ็อบเจกต์โดยระบุชื่ออ็อบเจกต์เป็นชื่อเดียวกันกับที่ฝั่งเซิร์ฟเวอร์ลงทะเบียนไว้ ในที่นี้คือ MyMathServer ซึ่งที่เราจะได้กลับมาจากการเรียกเมท็อด lookup() ในบรรทัดนี้ก็คืออ็อบเจ็กต์เรฟเฟอร์เรนซ์ (object reference) ไปยังอ็อบเจกต์บนฝั่งเซิร์ฟเวอร์ ให้สังเกตว่าเราใช้ชื่อของอินเทอร์เฟซ (interface) คือ MyMath ไม่ใช่ชื่อของคลาสผู้รับใช้ (servant class) MyMathImpl หลังจากนี้เราก็สามารถเรียกใช้เมท็อดของอ็อบเจกต์บนฝั่งเซิร์ฟเวอร์ได้ราวกับอ็อบเจกต์นั้นอยู่บนเครื่องเดียวกับไคลเอนต์ ดังแสดงในบรรทัดที่ 18 ซึ่งเป็นการเรียกใช้เมท็อด add()
คราวนี้ก็มารันโปรแกรมกันครับ เริ่มจากรัน rmiregistry ก่อน วันนี้ขอแสดงการรันบน Mac นะครับ คำสั่งที่ใช้ก็คือ rmiregistry & เพื่อให้โปรแกรม rmiregistry ไปทำงานอยู่หลังฉาก ดังแสดงในรูปต่อไปนี้ครับ
ถ้าใช้ Windows ก็เปิดคอมมานด์พรอมพท์ของวินโดวส์แล้วก็ใช้ start rmiregistry ได้ครับ
หลังจากนั้นก็รันโปรแกรมเซิร์ฟเวอร์ก็เหมือนการรันโปรแกรมปกติครับคือ
java MyMathServer
ก็จะได้ผลลัพธ์ตามรูป
และจากนั้นก็รันไคลเอนต์ java MyMathClient ซึ่งก็จะได้ผลลัพธ์ตามรูปครับ
เอาล่ะครับจบแล้ว ก็หวังว่าจะเป็นความรู้เบื้องต้นให้ทำตามแล้วนำไปต่อยอดกันต่อได้นะครับ...
สำหรับใครที่ไม่อยากป้อนโปรแกรมเองก็สามารถดาวน์โหลดได้จาก GitHub ครับ ถ้าใครโหลดไปแล้วจากตอนที่แล้วก็ไม่ต้องโหลดแล้วนะครับ