RMI question
FirFlies <[email protected]> Mon, 27 Oct 2008 23:59:47 -0700
| Newsgroups | gmane.comp.java.sun.rmi |
|---|---|
| Message-ID | <[email protected]> |
hello
i have the code:
import java.net.*;
import java.io.*;
public class Server{
public static void main(String []args){
DatagramSocket socket=null;
int serverPort=7999;
try{
//creating a new DatagramSocket
socket=new DatagramSocket(serverPort);
}
catch(Exception e){
System.out.println("DatagramSocket-error-"+e.getMessage());
System.exit(0);
}
//server activation
boolean listening=true;
DatagramPacket packet=null;
App app=new App();
Protocol p=null;
while(listening){
try{
byte[] bin=new byte[4048];
packet=new DatagramPacket(bin,bin.length);
socket.receive(packet);
ByteArrayInputStream bais=new ByteArrayInputStream(bin);
ObjectInputStream in=new ObjectInputStream(bais);
p=(Protocol)in.readObject();
//resolve the client's query
p.x=app.compute(p.x,p.y);
p.y=0;
//transform message into a stream
ByteArrayOutputStream baos=new ByteArrayOutputStream(256);
ObjectOutputStream out=new ObjectOutputStream(baos);
out.writeObject(p);
byte[] bout=baos.toByteArray();
//send the message
InetAddress address=packet.getAddress();
int port=packet.getPort();
packet=new DatagramPacket(bout,bout.length,address,port);
socket.send(packet);
}
catch(Exception e){
System.out.println(e.getMessage());
}
}
socket.close();
}
}
and the client:
import java.net.*;
import java.io.*;
import java.util.Scanner;
public class ClientCmmdc{
public static void main(String []args){
String hostServer="localhost";
int portServer=7999;
if(args.length>0)
hostServer=args[0];
if(args.length>1)
portServer=Integer.parseInt(args[1]);
try{
DatagramSocket socket=new DatagramSocket();
Protocol p=new Protocol(0,0);
Scanner scanner=new Scanner(System.in);
System.out.println("First number: ");
p.x=scanner.nextLong();
System.out.println("Last number: ");
p.y=scanner.nextLong();
//transform the message into a stream
ByteArrayOutputStream baos=new ByteArrayOutputStream(256);
ObjectOutputStream out=new ObjectOutputStream(baos);
out.writeObject(p);
byte[] bout=baos.toByteArray();
//send the message
InetAddress address=InetAddress.getByName(hostServer);
DatagramPacket packet=new
DatagramPacket(bout,bout.length,address,portServer);
socket.send(packet);
//waiting for response
byte[] bin=new byte[4048];
packet=new DatagramPacket(bin,bin.length);
socket.receive(packet);
//getting the response
ByteArrayInputStream bais=new ByteArrayInputStream(bin);
ObjectInputStream in=new ObjectInputStream(bais);
p=(Protocol)in.readObject();
System.out.println("Result is: "+p.x);
socket.close();
}
catch(Exception e){
System.out.println(e.getMessage());
}
}
}
Protocol class is:
import java.io.*;
public class Protocol implements Serializable{
long x,y;
Protocol(long x,long y){
this.x=x;
this.y=y;
}
}
and finally the App class is the class with one method, to calculate the
divisor of a two numbers:
public class App{
public long compute(long m,long n){
long r,c;
do{
c=n;
r=m%n;
m=n;
n=r;
}
while(r!=0);
return c;
}
}
i am not able to run this class with Datagram Channel. if anyone does really
help me, i would appreciate. with DatagramPacket, it's all ok, but using
Datagram Channel i really did not know how to solve the problem. with
DatagramPacket it works,so it's about the still problem, just using Datagram
Channel.
Thanks
--
View this message in context: http://www.nabble.com/RMI-question-tp20202198p20202198.html
Sent from the Java - RMI mailing list archive at Nabble.com.
===========================================================================
To unsubscribe, send email to [email protected] and include in the body
of the message "signoff RMI-USERS". For general help, send email to
[email protected] and include in the body of the message "help".
For a list of frequently asked RMI questions please refer to:
http://java.sun.com/j2se/1.3/docs/guide/rmi/faq.html
To view past RMI-USERS postings, please see:
http://archives.java.sun.com/archives/rmi-users.html