Hallo,
ich habe mir schon etliche RMI Tutorials angeschaut, leider weiß ich nicht, wie ich es am Ende umsetzen kann. Mein Code bisher:
RMI-Interface:
RMI-Methode (siehe weiter unten):
Server:
ServerGUI:
Wie kann ich nun also über die Socket-Verbindung auf die RMI Methode zugreifen? Was muss noch implementiert werden? Funktioniert es wohl mit this, dass das aktuelle Client Objekt zurückgegeben wird? Oder wie sollte ich es sonst machen? Ich bin noch relativ neu auf dem Gebiet und weiß noch nicht, wie der Zugriff auf die andere JVM geschieht.
ich habe mir schon etliche RMI Tutorials angeschaut, leider weiß ich nicht, wie ich es am Ende umsetzen kann. Mein Code bisher:
RMI-Interface:
Java:
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface SocketIf extends Remote{
Client getClient() throws RemoteException;
}
Java:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class Client extends UnicastRemoteObject implements SocketIf,Runnable, ActionListener {
private PrintWriter printWriter;
private OutputStreamWriter outputstreamwriter;
private OutputStream outputstream;
private InputStream input;
private Socket clientSocket;
public Client(InetAddress IP, int port) throws RemoteException {
clientSocket = null;
try {
clientSocket = new Socket(IP, port);
outputstream = clientSocket.getOutputStream();
outputstreamwriter = new OutputStreamWriter(outputstream);
printWriter = new PrintWriter(outputstreamwriter);
Thread sender = new Thread(this);
sender.start();
}
catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void closeClient() {
}
public void sendMessage(String nachricht) {
printWriter.println(nachricht);
printWriter.flush();
}
public void diw(){
System.out.println("Diw");
}
public void run() {
while (true) {
if (!clientSocket.isConnected()) {
try {
System.out.println("hi");
clientSocket.close();
System.exit(0);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == ServerGUI.getscreenshot) {
try {
File file = new File("c:/IMG_0065.jpg");
OutputStream out;
out = clientSocket.getOutputStream();
InputStream fileIn = new FileInputStream(file);
byte[] buffer = new byte[1024];
while (fileIn.available()>0){
out.write(buffer,0,fileIn.read(buffer));
}
fileIn.close();
}catch (IOException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
System.out.println("Sende");
sendMessage("New Message");
try {
outputstream.close();
clientSocket.close();
System.exit(0);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
@Override
public Client getClient() throws RemoteException {
return this;
}
}
Java:
import java.net.*;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.awt.image.ImageObserver;
import java.io.*;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class Server implements Runnable{
private InputStream inputstream;
private BufferedReader stdIn;
private InputStreamReader inputstreamreader;
private Socket client;
public static boolean getScreenshot;
public Server(int port) throws Exception {
ServerSocket socketServer = new ServerSocket(port);
while (true) {
client = socketServer.accept();
Thread t = new Thread(this);
t.start();
}
}
public boolean isGetScreenshot(){
return getScreenshot;
}
public void run() {
try {
FileOutputStream fileOut = new FileOutputStream("Screenshot.jpg");
byte[] buffer = new byte[1024];
while (client.isConnected()){
InputStream input = client.getInputStream();
int bytesRead = input.read(buffer);
if (bytesRead ==-1) break;
fileOut.write(buffer,0,bytesRead);
}
fileOut.close();
BufferedImage bild = ImageIO.read(new File("Screenshot.jpg"));
int imagewidth = bild.getWidth();
int imageheight = bild.getHeight();
JFrame frame = new JFrame("");
frame.setSize(imagewidth,imageheight);
ImageIcon icon = new ImageIcon( "Screenshot.jpg" );
JLabel label = new JLabel( icon );
frame.add(label);
frame.setVisible(true);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
inputstream = client.getInputStream();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
inputstreamreader = new InputStreamReader(inputstream);
stdIn = new BufferedReader(inputstreamreader);
String userInput;
try {
while ((userInput = stdIn.readLine()) != null) {
System.out.println("echo: " + userInput);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Java:
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.rmi.RemoteException;
import javax.swing.JButton;
import javax.swing.JFrame;
public class ServerGUI {
public static JButton getscreenshot;
/*
* @param args
*/
public static void main(String[] args) throws Exception {
JFrame frame = new JFrame();
getscreenshot = new JButton("Screenshot vom Clienten anzeigen");
if (Execution_Client.client == null){
System.out.println("No objekt");
System.out.println(Execution_Client.client);
}
getscreenshot.addActionListener(new Client(InetAddress.getByName("127.0.0.1"),4447));
frame.add(getscreenshot);
frame.setVisible(true);
}
}