⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 simpleregistryserver.java

📁 一个java的rmi实例
💻 JAVA
字号:
import java.util.*;
import java.net.*;
import java.io.*;

// This is a simple registry server.
// It does not do any error checking or bound checking.
// It uses the ROR as specified in RemoteObjectRef.java.

// Requests processed: 
//   (1) lookup (from SimpleRegistry.java)  --> returns ROR (one
//       component at a time to the lookup requesting client.
//   (2) rebind (from SimpleRegistry.java) --> binds ROR.
//   (3) "who are you?" (from LocateSimpleResgistry.java) -->
//       "I am simple registry server."

// This program does no checking.
// It should be run with one argument specifying the port
// it will be listening on, e.g.,
// java SimpleRegistryServer 2222

public class SimpleRegistryServer {

    public static void main(String args[])    
	throws IOException
    {
	int port = Integer.parseInt(args[0]);
	
	// Create a server socket to receive requests.
	ServerSocket serverSoc = new ServerSocket(port);
	System.out.println("Server socket created.\n");

	// Create a table to store (service name, ROR) pairs.
	Hashtable table = new Hashtable();
	
	// Loop: accept, receive request, reply, close.
	// It does not reuse connection.
	// Moreover, there is no concurrency, poor programming practice :-) 

	while (true)
	    {
		// Create a new socket connection.
		Socket newsoc = serverSoc.accept();

		System.out.println("Accepted the request.");
		
		// Create input/output streams on the socket (TCP is bidirectional).
		BufferedReader in = 
		    new BufferedReader(new InputStreamReader (newsoc.getInputStream()));
		PrintWriter out = 
		    new PrintWriter(newsoc.getOutputStream(), true);

		// Get a line, which should be one of the following:
		// (1) lookup servicename --> ["found", ROR] or ["not found"]
		// (2) rebind servicename ROR --> ["bound"] 
		// (3) "who are you?" --> "I am a simple registry server."

		String command = in.readLine();
		// Branch on command (=request) 
		if (command.equals("lookup"))
		    {
			System.out.println("It's a lookup request.");

			String serviceName = in.readLine();

			System.out.println("Service name is "+serviceName+".");
			
			// Test if serviceName is in the hash table.
			// If it is, get the corresponding ROR.
			if (table.containsKey(serviceName))
			    {
				System.out.println("Service name found.");

				RemoteObjectRef ror=
				    (RemoteObjectRef) table.get(serviceName);
 
				System.out.println
				    ("ROR is "+
				     ror.IP_adr+","+
				     ror.Port+","+
				     ror.Obj_Key+","+
				     ror.Remote_Interface_Name+".");

				out.println("found");
				out.println(ror.IP_adr);
				out.println(Integer.toString(ror.Port));
				out.println(Integer.toString(ror.Obj_Key));
				out.println(ror.Remote_Interface_Name);

				System.out.println("ROR was sent.\n");
			    }
			else
			    {
				System.out.println("Service not found.\n");

				out.println("not found");
			    }
		    }
		else if (command.equals("rebind"))
		    {
			System.out.println("It's a rebind request.");

			// No error check here.
			String serviceName = in.readLine();

			System.out.println("Service name is "+serviceName+".");
			
			// Receive ROR data from client.
			// Serialisation not used.

			System.out.println("SimpleRegistryServer received the following ror:");

			String IP_adr = 
			    in.readLine();
			int Port = 
			    Integer.parseInt(in.readLine());
			int Obj_Key = 
			    Integer.parseInt(in.readLine());
			String Remote_Interface_Name = 
			    in.readLine();

			System.out.println("IP address= "+IP_adr);
			System.out.println("port num= "+Port);
			System.out.println("object key= "+Obj_Key);
			System.out.println("Interface Name= "+Remote_Interface_Name);
			
			// Construct an ROR to be bound.
			RemoteObjectRef ror=
			    new RemoteObjectRef(IP_adr, 
						Port,
						Obj_Key,
						Remote_Interface_Name);

			// put it in the table.
			table.remove(serviceName);
			Object res = table.put(serviceName, ror);

			System.out.println("ROR is put in the hash table.\n");
				
			// ack.
			out.println("bound");
		    }
		else if (command.equals("who are you?"))
		    {
			out.println("I am a simple registry server.");
			System.out.println("I was asked who I was, so I answered.\n");
		    }
		else
		    {
			System.out.println("I got an imcomprehensive message.\n");
		    }

		// close the socket.
		newsoc.close();
	    }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -