|
![]() | 作者: mensch [mensch]
![]() |
登录 |
一个用java rmi做的程序,包括Server,Client,ServerInterface,要求: server能够自定义端口;能接收来自client的字符消息,变换大小写以后再发送回client;能够得到client的ip; client输入server的ip和port后,向server发送字符消息,并能接收server转换过的字符消息; 下面是我的程序: ************************ * ServerInterface.java * ************************ import java.rmi.*; public interface ServerInterface extends java.rmi.Remote { public String message(String client_msg,String client_ip) throws java.rmi.RemoteException; } ******************* * Server.java * ******************* import java.rmi.*; import java.rmi.server.*; import java.util.*; import java.rmi.registry.*; import java.io.*; public class Server extends UnicastRemoteObject implements ServerInterface{ int i=0; public Server() throws java.rmi.RemoteException{ super(); } public String message(String client_msg,String client_ip) throws java.rmi.RemoteException{ i++; do{ System.out.println("ip ist:" + client_ip); System.out.println(i + ". Message vom Client: " + client_msg + "\n"); char[] buffer = client_msg.toCharArray(); for(int i=0;i<client_msg.length();i++){ if (Character.isUpperCase(buffer[i])){ buffer[i]=Character.toLowerCase(buffer[i]); }else{ if(Character.isLowerCase (buffer[i])) buffer[i]=Character.toUpperCase(buffer[i]); } } String server_msg = String.valueOf(buffer); System.out.println("Message zurueckgeschikt!"); return(server_msg); }while(true); } public static void main(String[] args){ try{ BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in)); System.out.print("Port des Servers: "); int port = inFromUser.read(); LocateRegistry.createRegistry(port); Server server = new Server(); Naming.rebind("rmi://localHost:"+port+"/Data",server); System.out.println("Warte auf Anfragen..."); } catch(Exception e){ e.printStackTrace(); } } } ******************* * Client.java * ******************* import java.io.*; import java.rmi.*; import java.net.*; public class Client{ InetAddress myIPaddress=null; static ServerInterface server; static String clientIP; public void getMyIP() { try { myIPaddress=InetAddress.getLocalHost(); }catch(java.net.UnknownHostException e) {} String cip = myIPaddress.toString(); clientIP = cip.substring(cip.indexOf("/") + 1); } public static void main(String[] args) throws java.rmi.RemoteException{ try{ BufferedReader inData = new BufferedReader(new InputStreamReader(System.in)); System.out.print("IP-Adresse(Servers): "); String serverip = inData.readLine(); System.out.println(); System.out.print("Port(Servers): "); int serverport = inData.read(); System.out.println(); Client c = new Client(); c.getMyIP(); server = (ServerInterface) Naming.lookup("rmi://"+serverip+":"+serverport+"/Data"); do{ BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); System.out.print("Message des Nutzers eingegeben: "); String client_msg = in.readLine();// + "\n" + "IP: " + client_ip); System.out.println(clientIP); System.out.println("Message from Server: " + server.message(client_msg,clientIP)); System.out.println(); System.out.println(); }while(true); }catch(Exception e){ e.printStackTrace(); } } } 程序都可以编译,但是运行以后系统提示:"Exception in thread "main" java.lang.AbstractMethodError at Client.main(Client.java:47)" 出错是因为我在client里面调用server.message()的时候改为server.message(client_msg,client_ip),(注:如果是server.message(client_msg)则程序可以正常运行). 注:我的client的ip是在客户端得到后告诉给server的 程序百思不得其解,请高手指教 谢~~~~~~~~~~~~~~~~~ |
地主 发表时间: 06/12 02:25 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号