[Java] Datei von Client zum Server übertragen --> Weiterleitung an Clients

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von die_kackwurst, 2. Dezember 2009 .

  1. 2. Dezember 2009
    Datei von Client zum Server übertragen --> Weiterleitung an Clients

    Hi!

    Ich möchte sehr gerne von einem Client aus eine Datei mit nem Filechooser öffnen und diese soll dann zum Server geschickt werden. Dieser soll die Datei dann an alle Clients weiterleiten...

    Wie bekomme ich das hin? Habe schon so einige Anleitungen gefunden - aber das Problem ist, dass ich nicht weiß, wie ich die bytearrays neben den ganzen anderen Nachrichten die bei dem Chat noch verschickt werden trennen kann...

    Hier mal meine Klasse Server, Multithread und der Client...

    Code:
    package de.hwrberlin.jemm.net;
    
    import java.awt.EventQueue;
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.net.Socket;
    
    import org.eclipse.swt.graphics.Color;
    import org.eclipse.swt.widgets.Display;
    
    import de.hwrberlin.jemm.Benutzer;
    
    public class Client implements Runnable {
     private Socket socket;
     private BufferedReader in;
     private static BufferedWriter out;
     
     private volatile Thread t;
     private boolean login = false;
     public Benutzer[] userlist = new Benutzer[1000];
     public Benutzer[] neueListe = new Benutzer[1000];
     
     public Boolean masterStatus = false;
     
    
     private Color userfarbe = null;
    
     private String name;
     
     public void login(String host,int port) throws IOException{
     de.hwrberlin.jemm.handlers.Einstellungen.einstellungen_laden();
     name = de.hwrberlin.jemm.Activator.user.name;
     int rot = de.hwrberlin.jemm.Activator.user.farbe.getRed();
     int green = de.hwrberlin.jemm.Activator.user.farbe.getGreen();
     int blue = de.hwrberlin.jemm.Activator.user.farbe.getBlue();
     
     socket = new Socket(host,port);
     in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
     out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
     
     out.write(name+"&%"+rot+","+green+","+blue);
     out.newLine();
     out.flush();
     
     login = true;
     
     t = new Thread(this);
     t.start();
     }
     
     private void logout(){
     if (login){
     try{
     login=false;
     t = null;
     if (socket != null){
     socket.close();
     }
     if (in != null){
     in.close();
     }
     if (out != null){
     out.close();
     }
     }catch (IOException e){
     System.err.println(e);
     }
     }
     }
     
     @Override
     public void run() {
     try{
     while(Thread.currentThread() == t){
     final String msg = in.readLine();
     if (msg == null){
     break;
     }
     
     doUpdate(new Runnable(){
     public void run(){
     if (msg.startsWith("<JemmMessage>")){
     chatUpdate(msg);
     }
     if (msg.startsWith("<JemmUserList>")){
     neueListe = receiveList(msg, neueListe);
     userAdd(neueListe);
     } 
     if (msg.startsWith("<JemmUserSettingsLogout>")){
     
     }
     if (msg.startsWith("<JemmUserText>")){
     textChange(msg,userlist);
     }
     if (msg.startsWith("<JemmMaster>")){
     userlist = masterChange(msg,userlist);
     }
     if (msg.startsWith("<JemmNewText>")){
     newText(msg);
     }
     }
     });
     }
     }catch (IOException e){
     System.err.println(e);
     }
     }
     
     private void doUpdate(Runnable r){
     try{
     EventQueue.invokeLater(r);
     }catch(Exception e){
     System.err.println(e);
     }
     }
     
     public static void sendMsg(String msg) throws IOException{
     out.write(msg);
     out.newLine();
     out.flush();
     }
     
     public void chatUpdate(final String msg){
     new Thread(new Runnable() {
     public void run() {
     try { Thread.sleep(100); } catch (Exception e) { }
     Display.getDefault().asyncExec(new Runnable() {
     public void run() {
     new de.hwrberlin.jemm.views.Chatfenster().text.append(msg.substring("<JemmMessage>".length(),msg.length())+"\r\n");
     }
     });
     }
     }).start();
     }
     
     public void statusUpdate(final String msg){
     new Thread(new Runnable() {
     public void run() {
     try { Thread.sleep(100); } catch (Exception e) { }
     Display.getDefault().asyncExec(new Runnable() {
     public void run() {
     new de.hwrberlin.jemm.views.Browser().lblStatus.setText(msg.substring("<JemmStatusUpdate>".length(),msg.length())+"\r\n");
     }
     });
     }
     }).start();
     }
     
     public Benutzer[] receiveList(String msg, Benutzer[] users){
     int i=0; 
     String name = msg.substring("<JemmUserList>".length(),msg.indexOf("&%"));
     
     String zwischenFarbe = msg.substring(msg.indexOf("&%")+2,msg.indexOf("%&"));
     String rot = zwischenFarbe.substring(0,zwischenFarbe.indexOf(","));
     String gruen = zwischenFarbe.substring(zwischenFarbe.indexOf(",")+1,zwischenFarbe.lastIndexOf(","));
     String blau = zwischenFarbe.substring(zwischenFarbe.lastIndexOf(",")+1,zwischenFarbe.length()); 
     Color userfarbe = new Color(null,Integer.parseInt(rot),Integer.parseInt(gruen),Integer.parseInt(blau));
     
     String stat = msg.substring(msg.indexOf("%&")+2, msg.indexOf(":"));
     Boolean status;
     if (stat.equals("false")){
     status = false;
     }else{
     status = true;
     }
     
     String IP = msg.substring(msg.indexOf(":"),msg.length());
     if (users[0]==null){
     i=0;
     }else{
     while(users[i]!=null){
     i++;
     }
     }
     users[i]=new Benutzer(name,userfarbe,status,IP);
     
     return users;
     }
     
     public void userAdd(final Benutzer[] user){
     new Thread(new Runnable() {
     public void run() {
     try { Thread.sleep(100); } catch (Exception e) { }
     Display.getDefault().asyncExec(new Runnable() {
     public void run() {
     new de.hwrberlin.jemm.views.User().hinzufuegen(user);
     userlist = neueListe;
     neueListe = null;
     neueListe = new Benutzer[1000];
     
     }
     });
     }
     }).start();
     }
     
     public void textChange(final String msg, final Benutzer[] users) {
     new Thread(new Runnable() {
     public void run() {
     try { Thread.sleep(100); } catch (Exception e) { }
     Display.getDefault().asyncExec(new Runnable() {
     public void run() { 
     try{ 
     int i = 0;
     
     String username = msg.substring("<JemmUserText>".length(),msg.indexOf("&%"));
     int position = Integer.valueOf(msg.substring(msg.indexOf("&%")+2,msg.lastIndexOf("&%"))).intValue();
     String letter = msg.substring(msg.lastIndexOf("&%")+2,msg.length());
     
     if(users[i]!=null){
     if (users[i].name.equals(username)){
     userfarbe = users[i].farbeText;
     }else{
     while(users[i+1]!=null){
     if (users[i+1].name.equals(username)){
     userfarbe = users[i+1].farbeText;
     }
     i++;
     }
     }
     }
     
     de.hwrberlin.jemm.views.Editor.userText(userfarbe,position,letter);
     }catch(Exception e){
     System.err.println(e);
     }
     }
     });
     }
     }).start();
     }
     
     public Benutzer[] masterChange(final String msg, final Benutzer[] users) {
     new Thread(new Runnable() {
     public void run() {
     try { Thread.sleep(100); } catch (Exception e) { }
     Display.getDefault().asyncExec(new Runnable() {
     public void run() { 
     try{ 
     int i = 0;
     
     String username = msg.substring("<JemmMaster>".length(),msg.indexOf("&%"));
     String IP = msg.substring(msg.lastIndexOf("&%")+2,msg.length());
     
     if(users[i]!=null){
     if (users[i].name.equals(username) && users[i].IP.equals(IP)){
     users[i].isMaster = true;
     }else{
     while(users[i+1]!=null){
     if (users[i+1].name.equals(username) && users[i].IP.equals(IP)){
     users[i+1].isMaster = true;
     }
     i++;
     }
     }
     }
     }catch(Exception e){
     System.err.println(e);
     }
     }
     });
     }
     }).start();
     return users;
     }
     
     public void newText(final String msg){
     new Thread(new Runnable() {
     public void run() {
     try { Thread.sleep(100); } catch (Exception e) { }
     Display.getDefault().asyncExec(new Runnable() {
     public void run() {
     /* String textname = msg.substring("<JemmNewText>".length(),msg.indexOf("<?>"));
     String textinhalt = msg.substring(msg.lastIndexOf("<?>")+3,msg.length());
     
     try {
     de.hwrberlin.jemm.views.Editor.oeffnen(textname,textinhalt);
     de.hwrberlin.jemm.views.Browser.hinzufuegen(textname);
     } catch (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
     }*/
     }
     });
     }
     }).start();
     }
    }
    
    Code:
    package de.hwrberlin.jemm.net;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.net.Socket;
    
    import org.eclipse.swt.graphics.Color;
    
    import de.hwrberlin.jemm.Benutzer;
    
    public class MultiThread extends Thread {
     private final static int TIMEOUT = 600000;
     private Socket client;
     private String name;
     private BufferedReader in;
     private PrintWriter out;
     public String clientAddr;
     public static Benutzer[] userlist = new Benutzer[1000];
     
     public MultiThread(Socket client){
     this.client = client;
     }
     
     public void run(){
     clientAddr = client.getInetAddress().getHostAddress();
     int clientPort = client.getPort();
     
     try{
     client.setSoTimeout(TIMEOUT);
     
     in = new BufferedReader(new InputStreamReader(client.getInputStream()));
     out = new PrintWriter(client.getOutputStream(),true);
     
     login();
     System.out.println("Verbindung zu "+clientAddr+":"+clientPort+" aufgebaut: "+name);
     
     String message;
     while((message = in.readLine()) != null){
     if (message.startsWith("<JemmStatusUpdate>")){
     sendMessage(message);
     }else{
     if (message.startsWith("<JemmUserText>")){
     sendMessage(message);
     }else{
     if (message.startsWith("<JemmMaster>")){
     sendMessage(message+"&%"+clientAddr);
     }else{
     if (message.startsWith("<JemmNewText>")){
     sendMessage(message);
     }else{
     if (message.startsWith("<JemmMessage>")){
     sendMessage("<JemmMessage>"+name+": "+message.substring("<JemmMessage>".length(),message.length()));
     }else{
     
     }
     }
     }
     }
     }
     }
     
     in.close();
     out.close();
     }catch (IOException e){
     System.err.println(e);
     }
     finally{
     logout();
     
     try{
     if (client != null){
     client.close();
     }
     }catch (IOException e){}
     
     System.out.println("Verbindung zu "+clientAddr+":"+clientPort+" abgebaut: "+name);
     }
     }
     
     private void login() throws IOException{
     int i=0;
     
     Server.manager.add(out);
     String msg = in.readLine();
     System.out.println(msg);
     
     String zwischenFarbe = msg.substring(msg.indexOf("&%")+2,msg.length());
     String rot = zwischenFarbe.substring(0,zwischenFarbe.indexOf(","));
     String gruen = zwischenFarbe.substring(zwischenFarbe.indexOf(",")+1,zwischenFarbe.lastIndexOf(","));
     String blau = zwischenFarbe.substring(zwischenFarbe.lastIndexOf(",")+1,zwischenFarbe.length()); 
     Color userfarbe = new Color(null,Integer.parseInt(rot),Integer.parseInt(gruen),Integer.parseInt(blau));
     
     name = msg.substring(0,msg.indexOf("&%"));
     
     System.out.println(letztePosition(userlist));
     userlist[letztePosition(userlist)] = new Benutzer(name,userfarbe,false,clientAddr);
     System.out.println(letztePosition(userlist));
     
     System.out.println(userlist[0]);
     System.out.println(userlist[1]);
     
     sendMessage("<JemmMessage>"+name+" ist dazugekommen");
     sendUserlist(userlist);
     }
     
     private void logout(){
     Server.manager.remove(out);
     sendMessage("<JemmMessage>"+name+" hat sich verabschiedet");
     sendMessage("<JemmUserSettingsLogout>"+name);
     }
     
     static void sendMessage(String message){
     synchronized (Server.manager){
     for (PrintWriter out : Server.manager){
     out.println(message);
     }
     }
     }
     
     static void sendUserlist(Benutzer[] users){
     int i=0;
     
     do{
     String name = users[i].name;
     String farbe = users[i].farbeText.getRed()+","+users[i].farbeText.getGreen()+","+users[i].farbeText.getBlue();
     Boolean status = users[i].isMaster;
     String IP = users[i].IP;
     sendMessage("<JemmUserList>"+name+"&%"+farbe+"%&"+status+":"+IP);
     System.out.println(i);
     i++;
     }while(users[i]!=null); 
     }
     
     static int letztePosition(Benutzer[] users){
     int position = 0;
     while(users[position]!=null){
     position++;
     }
     return position;
     }
    }
    
    Code:
    package de.hwrberlin.jemm.net;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.net.InetAddress;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.util.Vector;
    
    import de.hwrberlin.jemm.Benutzer;
    
    public class Server implements Runnable{
     public static Vector<PrintWriter> manager = new Vector<PrintWriter>();
     private int port = new de.hwrberlin.jemm.Activator().user.port;
     
     public void startServer(){
     try{
     de.hwrberlin.jemm.handlers.Einstellungen.einstellungen_laden();
     port = new de.hwrberlin.jemm.Activator().user.port;
     ServerSocket server = new ServerSocket(port);
     
     InetAddress addr = InetAddress.getLocalHost();
     System.out.println("Server auf "+addr.getHostName()+"/"+addr.getHostAddress()+":"+port+" gestartet ..."); 
     while(true){
     Socket client = server.accept();
     new MultiThread(client).start();
     }
     }catch (IOException e){
     System.err.println(e);
     }
     }
    
     @Override
     public void run() {
     // TODO Auto-generated method stub
     new Server().startServer();
     }
    }
    
    Ich weiß jetzt nicht so wirklich wie ich das machen soll ^^

    Mfg
     
  2. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.