Socket Datei von Client zum Server übertragen --> Weiterleitung an Clients

Status
Nicht offen für weitere Antworten.

Prengepower

Aktives Mitglied
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
 

Prengepower

Aktives Mitglied

öhm gehts vielleicht auch nen bissl ausführlicher ^^ ansich ist mir ja auch klar wie ich dateien verschicke aber ich weiß halt nicht wie ich das hier einbauen soll weil ja nebenbei noch nachrichten verschickt werden...

habs jetzt mal so versucht aber klappt net :(

Code:
package de.hwrberlin.jemm.net;

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
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 static 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{
					                DataInputStream is = new DataInputStream(client.getInputStream());

					                File tmpFile = new File("tmpFile");

					                FileOutputStream fos = new FileOutputStream(tmpFile);

					                int i = 0;
					                while ((i = is.read()) != -1) {
					                    fos.write(i);
					                    fos.flush();
					                }
					                fos.close();
					                is.close();
					                
					                fileSend(tmpFile);
								}
							}
						}
					}
				}
			}
			
			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();
		
		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("&%"));
 	   	
 	   	userlist[letztePosition(userlist)] = new Benutzer(name,userfarbe,false,clientAddr);
 	   	
 	   	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;
	}
	
	public static void fileSend(File datei) throws IOException{
		synchronized (Server.manager){
			for (PrintWriter out : Server.manager){
				DataOutputStream dos = new DataOutputStream(client.getOutputStream());

				FileInputStream fis = new FileInputStream(datei);

				int i = 0;
				while ((i = fis.read()) != -1)
					dos.write(i);

				dos.flush();
				dos.close();
				fis.close();
			}
		}
	}
}

Code:
package de.hwrberlin.jemm.net;

import java.awt.EventQueue;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
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);
						}else{
							if (msg.startsWith("<JemmUserList>")){
							neueListe = receiveList(msg, neueListe);
							userAdd(neueListe);
							}else{	
								if (msg.startsWith("<JemmUserSettingsLogout>")){
									
								}else{
									if (msg.startsWith("<JemmUserText>")){
										textChange(msg,userlist);
									}else{
										if (msg.startsWith("<JemmMaster>")){
											userlist = masterChange(msg,userlist);
										}else{
											//if (msg.startsWith("<JemmNewText>")){
												receiveText();
											//}
										}
									}
								}
							}
						}
					}
				});
				}
			}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(){
		  new Thread(new Runnable() {
			      public void run() {
			            try { Thread.sleep(100); } catch (Exception e) { }
			            Display.getDefault().asyncExec(new Runnable() {
			               public void run() {
			            	   File file = new File("C:\\Documents and Settings\\Administrator\\Desktop\\New Text Document.txt");
			            	   System.out.println("Datei bestimmt");
			            	   try {
			            		   
			                       DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
			                       
			                       FileInputStream fis = new FileInputStream(file);
			                       
			                       int i = 0;
			                       while ((i = fis.read()) != -1)
			                           dos.write(i);

			                       dos.flush();
			                       dos.close();
			                       
			                       fis.close();
			                       
			                       System.out.println("Datei gesendet");
								} catch (IOException e) {
									// TODO Auto-generated catch block
									e.printStackTrace();
								}

			            	   
			               }
			            });
			         }
			   }).start();
	}
	
	public void receiveText(){
		  new Thread(new Runnable() {
			      public void run() {
			            try { Thread.sleep(100); } catch (Exception e) { }
			            Display.getDefault().asyncExec(new Runnable() {
			               public void run() {
			            	   try {
			            		   
			            		   DataInputStream is = new DataInputStream(socket.getInputStream());

			            		   File file = new File("C:\\Documents and Settings\\Administrator\\Desktop\\uebertrageneDatei.txt");

			                       FileOutputStream fos = new FileOutputStream(file);

			                       int i = 0;
			                       while ((i = is.read()) != -1) {
			                           fos.write(i);
			                           fos.flush();
			                       }
			                       fos.close();
			                       is.close();

								} catch (IOException e) {
									// TODO Auto-generated catch block
									e.printStackTrace();
								}

			            	   
			               }
			            });
			         }
			   }).start();
	}
}

mfg
 
Zuletzt bearbeitet:

FArt

Top Contributor
In der kurzen, prägnanten Antwort steckt folgende Information:
ich würde das nicht selber klöppeln, besonders weil ja alle Clients benachrichtigt werden müssen usw. JMS ist dafür hervorragend geeignet. Einer verschickt eine Message mit Payload (dein File), viele registrieren sich auf ein Topic und konsumieren die Message.

Wenn du die Infrastruktur schon hast (bidirektionale Socketverbindung zu allen Clients), dann musst du dir ein eigenes Protokoll überlegen und die Daten einfach streamen.

Anhand der Bemerkung "ich weiß nicht was ich machen soll" würde ich dir zu erster Variante raten: JMS. Informationen dazu findest du bei Google oder hier im Forum.

Cool, was die knappe Antwort "JMS" alles ausdrückt ;-)
 

Prengepower

Aktives Mitglied
In der kurzen, prägnanten Antwort steckt folgende Information:
ich würde das nicht selber klöppeln, besonders weil ja alle Clients benachrichtigt werden müssen usw. JMS ist dafür hervorragend geeignet. Einer verschickt eine Message mit Payload (dein File), viele registrieren sich auf ein Topic und konsumieren die Message.

Wenn du die Infrastruktur schon hast (bidirektionale Socketverbindung zu allen Clients), dann musst du dir ein eigenes Protokoll überlegen und die Daten einfach streamen.

Anhand der Bemerkung "ich weiß nicht was ich machen soll" würde ich dir zu erster Variante raten: JMS. Informationen dazu findest du bei Google oder hier im Forum.

Cool, was die knappe Antwort "JMS" alles ausdrückt ;-)

hehe jo danke... ABER: ich habe jetzt schon so einige sachen mit der einfachen socketverbindung gemacht... wie halt ne userliste, veränderte zeichen, nachrichten.. das will ich jetzt logischerweise nich talles wieder wegmachen und deswegen fällt JMS wohl flach...

wie meinst du das mit dem Protokoll?

Mfg
 
T

tuxedo

Gast
wie meinst du das mit dem Protokoll?

Guckst du mal hier: Netzwerkprotokoll ? Wikipedia

Oder kurz gesagt: Wenn du mehrere verschiedene Informationen über einen Kanal schicken willst, solltest du mitschicken WAS und WIEVIEL DAVOn du schickst. Mit der Info kann der Gegenüber entsprechend handeln und die Informationen voneinander trennen.
Wie das genau ausschaut ist dir überlassen und richtet sich nach deinen Anforderungen. Evtl. kannst du auch bestehenden Protokolle für deinen Zweck verwenden: HTTP, FTP, ... Aber auch das musst du wissen.

- Alex
 

Prengepower

Aktives Mitglied
so ich hab jetzt was gemacht was soweit auch einigermaßen funktioniert ABER es funktioniert selbst auf dem selben rechner nicht zuverlässig... mal werden alle textzeilen gesendet und mal bleiben nen paar verschwunden.. die reihenfolge ist auch manchmal unterschiedlich! außerdem wird meine tmp datei nicht immer gelöscht! bitte helft mir...

hier der text:

Code:
package de.hwrberlin.jemm.net;

import java.awt.EventQueue;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
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 Boolean ende = 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);
						}else{
							if (msg.startsWith("<JemmUserList>")){
							neueListe = receiveList(msg, neueListe);
							userAdd(neueListe);
							}else{	
								if (msg.startsWith("<JemmUserSettingsLogout>")){
									
								}else{
									if (msg.startsWith("<JemmUserText>")){
										textChange(msg,userlist);
									}else{
										if (msg.startsWith("<JemmMaster>")){
											userlist = masterChange(msg,userlist);
										}else{
											if (msg.startsWith("<JemmNewText>") || msg.startsWith("<JemmTxtEnd>")){
												receiveText(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++;
		            			   }
		            		   }
		            	   }
		            	   
		            	   if (de.hwrberlin.jemm.Activator.user.name.equals(username)){
		            		   new de.hwrberlin.jemm.views.Editor().text.setEnabled(true);
			            	   new de.hwrberlin.jemm.views.User().btnMaster.setText("Master abgeben");
			            	   new de.hwrberlin.jemm.views.User().btnBewerben.setEnabled(false);
		            	   }else{
		            		   new de.hwrberlin.jemm.views.User().btnMaster.setEnabled(false);
			            	}		            	   
		            	   }catch(Exception e){
		            		   System.err.println(e);
		            	   }
		               }
		            });
		         }
		   }).start();
		return users;
	}
	
	public void newText(final File file){
		  new Thread(new Runnable() {
			      public void run() {
			            try { Thread.sleep(100); } catch (Exception e) { }
			            Display.getDefault().asyncExec(new Runnable() {
			               public void run() {	            	   
			            	   try {
			            		   			            		   
			                       FileInputStream fis = new FileInputStream(file);
			                       InputStreamReader fout = new InputStreamReader ( fis );
				          	       BufferedReader br = new BufferedReader ( fout );
			                       
			                       while (br.ready()){
			                    	   sendMsg("<JemmNewText>"+br.readLine());
			                       }
			                       br.close();
			                       
			                       
								} catch (IOException e) {
									// TODO Auto-generated catch block
									e.printStackTrace();
								}
								try {
									sendMsg("<JemmTxtEnd>");
								} catch (IOException e) {
									// TODO Auto-generated catch block
									e.printStackTrace();
								}
			            	   
			               }
			            });
			         }
			   }).start();
	}
	
	public void receiveText(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() {
			            	   try {
			            		   File file = new File("tmpFile");
			            		   		            		   
			            		   FileWriter fw = new FileWriter(file,true);
			            		   			            		   
			            		   if (msg.startsWith("<JemmTxtEnd>")){
			            			   
			            		   }else{
			            			   String text = msg.substring("<JemmNewText>".length(),msg.length());
			            			   if (file.exists()){
				            			   fw.write(text+"\r\n");
				            			   fw.flush();
				            		   }else{
				            			   fw.write(text);
				            			   fw.flush();
				            		   }
			            		   }		            		   
			            		   
			            		   if (msg.startsWith("<JemmTxtEnd>")) {
			                           ende = true;
			                       }
			            		   
			                       fw.close();
			                       
			                       if (ende){
			                    	   de.hwrberlin.jemm.views.Browser.hinzufuegen(file.getName());
			                    	   de.hwrberlin.jemm.views.Editor.oeffnen(file);
			               			   de.hwrberlin.jemm.views.Editor.dateihinzu(file);
			               			   file.delete();
			               			   ende = false;
			                       }
								} catch (IOException e) {
									// TODO Auto-generated catch block
									e.printStackTrace();
								}

			            	   
			               }
			            });
			         }
			   }).start();
	}
}

Code:
package de.hwrberlin.jemm.net;

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
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 static 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{
					                sendMessage(message);
								}
							}
						}
					}
				}
			}
			
			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();
		
		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("&%"));
 	   	
 	   	userlist[letztePosition(userlist)] = new Benutzer(name,userfarbe,false,clientAddr);
 	   	
 	   	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;
	}
	
	public static void fileSend(File datei) throws IOException{
		synchronized (Server.manager){
			for (PrintWriter out : Server.manager){
				FileInputStream fis = new FileInputStream(datei);

				int i = 0;
				while ((i = fis.read()) != -1)
					sendMessage(fis.toString());

				fis.close();
			}
		}
	}
}

Danke schonmal...
 
T

tuxedo

Gast
Ach herrje. Das sieht ja aus wie Kraut und Rüben :shock:

Die vielen If und Elseif Konstrukte sind hoffentlich nur vorrübergehend. So richtig durchsteigen tut man da auf die schnelle nicht, was die Fehlersuche nicht einfach macht.

Mal so nebenbei erwähnt: Wenn du deinen Code in Java-Code-Tags setzt, dann lässt er sich besser lesen als wenn so wie jetzt alles einfarbig dargestellt wird.

- Alex
 

FArt

Top Contributor
so ich hab jetzt was gemacht was soweit auch einigermaßen funktioniert ABER es funktioniert selbst auf dem selben rechner nicht zuverlässig... mal werden alle textzeilen gesendet und mal bleiben nen paar verschwunden.. die reihenfolge ist auch manchmal unterschiedlich! außerdem wird meine tmp datei nicht immer gelöscht! bitte helft mir...
Das ist der Grund, warum man das Rad nicht unbedingt neu erfinden sollte und (auch im fortgeschrittenen Stadium) evtl. auf was fertiges zurückgreifen sollte.
Es gibt so viele APIs für Remotekommunikation, so viele Protokolle... es ist NICHT besser selber "schnell mal einen Socket aufzumachen und Bytes durchzuschieben". Du wirst auf Probleme und neue Anforderungen stoßen, die Tausende (nicht übertrieben) vor dir auch schon hatten. Suche allein mal hier im Forum und du siehst was ich meine...

Ausnahme: du möchtest was ausprobieren / lernen.
 
T

tuxedo

Gast
Für den "ich brauch das und will nicht all die Details lernen"-Fall:

Fertiges RPC Framework
- RMI (Sun Doku ist dein Freund)
- SIMON (Siehe meine Signatur)
- viele weitere findest du bei Google

Allgemeines Kommunikationsframework:

- MINA -> Apache MINA - Index
- NETTY -> JBoss.org: Netty - The Java NIO Client Server Socket Framework
Mit beiden kannst du dir schicke Protokolle aufsetzen ohne dich mit Sockets rumquälen zu müssen. SIMON verwendet intern z.B. MINA ...

Im Fall von "Ich will's aber lernen und mich interessieren die Details":

Zieh mal ein kleineres, überschaubares und sauber strukturiertes Test-Programm auf. Das da oben ist nicht wirklich gut wartbar...

Gruß
Alex
 

Prengepower

Aktives Mitglied
Für den "ich brauch das und will nicht all die Details lernen"-Fall:

Fertiges RPC Framework
- RMI (Sun Doku ist dein Freund)
- SIMON (Siehe meine Signatur)
- viele weitere findest du bei Google

Allgemeines Kommunikationsframework:

- MINA -> Apache MINA - Index
- NETTY -> JBoss.org: Netty - The Java NIO Client Server Socket Framework
Mit beiden kannst du dir schicke Protokolle aufsetzen ohne dich mit Sockets rumquälen zu müssen. SIMON verwendet intern z.B. MINA ...

Im Fall von "Ich will's aber lernen und mich interessieren die Details":

Zieh mal ein kleineres, überschaubares und sauber strukturiertes Test-Programm auf. Das da oben ist nicht wirklich gut wartbar...

Gruß
Alex

ja ist ja alles schön und gut aber das heißt doch jetzt ansich, dass ich alles nochmal neu machen muss ne?! Gibts nicht auch eine Variante wo ich das bisher geschaffene behalten kann?
 
T

tuxedo

Gast
ja ist ja alles schön und gut aber das heißt doch jetzt ansich, dass ich alles nochmal neu machen muss ne?! Gibts nicht auch eine Variante wo ich das bisher geschaffene behalten kann?

Ja so ist das eben in nem Lernprozess. Entweder alles neu machen (dieses mal etwas besser als beim letzten mal), oder eben viel refactoring betreiben und sich durch den Code-Dschungel durchschlagen.

That's life ...
 

Prengepower

Aktives Mitglied
Ja so ist das eben in nem Lernprozess. Entweder alles neu machen (dieses mal etwas besser als beim letzten mal), oder eben viel refactoring betreiben und sich durch den Code-Dschungel durchschlagen.

That's life ...

mmh doof nur wenn das ganze spielchen die woche fertig werden MUSS ! -.- Und RMI hatte ich ja nicht in Eclipse RCP Plug-In Project zum laufen bekommen...
 
T

tuxedo

Gast
Na dann bleiben dir 2 Optionen:

Entweder dein Protokoll auf vordermann bringen, oder nochmal RMI probieren. Wobei wie gesagt es keinen Grund gibt warum RMI mit Eclipse RCP nicht funktionieren soll.

- Alex
 

FArt

Top Contributor
mmh doof nur wenn das ganze spielchen die woche fertig werden MUSS ! -.- Und RMI hatte ich ja nicht in Eclipse RCP Plug-In Project zum laufen bekommen...

Die JMS Variante würde ich sagen bekommt in erfahrener Entwickler (der noch nie mit JMS gearbeitet hat) in sehr kurzer Zeit zum laufen. Die API ist im Prinzip einfacher (für simple Beispiele wie sie hier benötigt werden) als plain sockets.

Senden: mache Connection auf, erstelle Session, erstelle Message, fülle Message mit DAten und sende Message.

Empfänger: registriert sich auf Topic (Auch connection, sesion usw.) und empfängt somit automatisch Messages aus dem Topic, holt die Daten raus, fertig.
 

Prengepower

Aktives Mitglied
Na dann bleiben dir 2 Optionen:

Entweder dein Protokoll auf vordermann bringen, oder nochmal RMI probieren. Wobei wie gesagt es keinen Grund gibt warum RMI mit Eclipse RCP nicht funktionieren soll.

- Alex

könntest du dir vll im anderen thema mal angucken warum RMI net läuft?? hab die fehler hingeschrieben...
 
T

tuxedo

Gast
Oh ja, hatte JMS vergessen. Das ist natürlich auch ne Möglichkeit.

@Prengepower

Hab dort schon geantwortet.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S StringArray in .txt Datei --> langsam wegen Client/Server!? Netzwerkprogrammierung 16
R Server/Client Verbindung - Datei schreiben Netzwerkprogrammierung 15
R HTTP Apache HTTP Client: Request mit angehängter Datei Netzwerkprogrammierung 2
A Bei FTP Übertragung wird Datei nicht komplett übertragen Netzwerkprogrammierung 2
J Datei Download vom Server Netzwerkprogrammierung 8
H Datei mit Anhang via http "hochladen" Netzwerkprogrammierung 16
E JCIFS - Smb - Datei kann nur von einem Benutzer bearbeitet werden Netzwerkprogrammierung 1
Aruetiise Socket Datei Endung Netzwerkprogrammierung 6
A FTP wie kann ich von java auf datei in fpt://192.168.178.1 lesen/schreiben? Netzwerkprogrammierung 3
K HTTP Formulare füllen und Datei downloaden Netzwerkprogrammierung 23
B JSch Filetransfer ohne KnownHosts Datei? Netzwerkprogrammierung 0
A Datei erzeugen und auf der Weboberfläche downloaden (Tomcat) Netzwerkprogrammierung 4
Sogomn HTTP Datei herunterladen Netzwerkprogrammierung 13
C Inhalt einer .JPG Datei in einen OutputStream schreiben? Netzwerkprogrammierung 10
F FTP FTPClient Datei lässt sich nicht öffnen Netzwerkprogrammierung 4
F HTTP Serialisierte Objekte aus Datei von Server Netzwerkprogrammierung 1
T Anwendungseinstellungen ohne Datei übertragen? Netzwerkprogrammierung 8
F FTP Einzelne Datei von FTP-Server überprüfen Netzwerkprogrammierung 0
L FTP Lesen einer Datei vom Server - Aufgehangen Netzwerkprogrammierung 0
M jsf-seite beim hinzufügen einer csv-datei in einen ordner aktualiseren Netzwerkprogrammierung 0
D Einfache Verbindung zu Linux Server und Datei auslesen Netzwerkprogrammierung 13
S Datei(XML) per RMI an Server schicken Netzwerkprogrammierung 0
V Datei Download Fenster Netzwerkprogrammierung 9
S Datei schreiben über Applet Netzwerkprogrammierung 8
C Socket Datei Übertragung Netzwerkprogrammierung 5
D Datei hochladen zu PHP Server Netzwerkprogrammierung 8
C Datei über Socket schreiben und Ereignis lesen Netzwerkprogrammierung 9
K HTTP Eigener Http Response für Datei-Download Netzwerkprogrammierung 4
D Socket Datei nur stückweise über Socket verschicken Netzwerkprogrammierung 6
T Datei downloaden ohne den Dateinamen zu kennen Netzwerkprogrammierung 2
H Datei in DropBox schreiben Netzwerkprogrammierung 23
N über Java in eine Text-Datei auf einem Server schreiben Netzwerkprogrammierung 2
V Datei auf Server Schreiben Netzwerkprogrammierung 18
N Einen Server als ausführbare Datei exportieren Netzwerkprogrammierung 15
N Problem über http eine Datei zu senden Netzwerkprogrammierung 4
B FTP Datei auslesen ohne einloggen möglich? Netzwerkprogrammierung 19
C Datei auf server speichern Netzwerkprogrammierung 16
P FTP Nochmal wachsende Datei per FTP lesen Netzwerkprogrammierung 9
W Datei automatisiert kopieren! Netzwerkprogrammierung 5
P Wachsende Datei per FTP lesen Netzwerkprogrammierung 2
U Datei über das Netzwerk einlesen und speichern Netzwerkprogrammierung 8
S Servlet - Datei kann nicht gelöscht werden Netzwerkprogrammierung 12
G Txt datei von Website downloaden Netzwerkprogrammierung 8
I HTTP Datei Uploaden mit http und Sprache anpassen Netzwerkprogrammierung 7
1 Datei senden/empfangen funzt nicht... Netzwerkprogrammierung 5
S ActiveMQ, JMS und Datei übertragen Netzwerkprogrammierung 25
M Socket Datei über Socket versenden Netzwerkprogrammierung 5
U Web Datei downloaden und bei Änderungen wieder zurückspielen Netzwerkprogrammierung 5
M Class-Datei aus Eclipse mit Xampp Netzwerkprogrammierung 4
A HTTP Download einer Datei mit "Statistiken" Netzwerkprogrammierung 2
B Zugriff auf eine Text- und XML-Datei Netzwerkprogrammierung 4
Dit_ FTP, Datei Hochladen Netzwerkprogrammierung 4
Ollek Download einer Datei durch SFTP mit Java Netzwerkprogrammierung 12
J Datei übertragen ja String + datei übertragen nein Netzwerkprogrammierung 5
P Name der Download-Datei ermitteln Netzwerkprogrammierung 8
N Socket TCP Datei Transfer Netzwerkprogrammierung 2
L Java über php datei lesen? Netzwerkprogrammierung 18
Akrillo Datei per Netzwerk senden Netzwerkprogrammierung 10
P HTTP Problem beim Download von einer Datei Netzwerkprogrammierung 4
L Größe einer Datei auslesen die im Netz liegt Netzwerkprogrammierung 4
weeego Ping über CMD, Umweg über Batch Datei sparen. Netzwerkprogrammierung 17
R Versenden einer MIME-Datei per E-Mail [solved] Netzwerkprogrammierung 5
O Mehrere Datei per DataInput/OutputStream über Socket Netzwerkprogrammierung 12
S Bild-Datei von Servlet an Browser senden Netzwerkprogrammierung 8
U Datei via UDP Netzwerkprogrammierung 8
C Dateigröße einer Datei im Internet ermitteln Netzwerkprogrammierung 2
S Error 404 obwohl die Datei existiert Netzwerkprogrammierung 9
T Datei Herunterladen und ausführen Netzwerkprogrammierung 5
S Mittels Java XML abfragen und nicht die Ausgabe-HTML-Datei Netzwerkprogrammierung 5
C PCAP Datei auslesen Netzwerkprogrammierung 8
F Applet Datei Zugriff Netzwerkprogrammierung 13
G Datei performant im Netzwerk verschieben Netzwerkprogrammierung 4
M [Commons NET] Prüfen, ob auf FTP Datei vorhanden ist Netzwerkprogrammierung 2
Rontu Problem beim Übertragen einer Datei Netzwerkprogrammierung 9
E Größe der Datei vor Download ermitteln Netzwerkprogrammierung 3
C Dateiübertragung - Datei immer ein 4096faches von n Netzwerkprogrammierung 2
E Applet zum Datei-Upload Netzwerkprogrammierung 3
A FileChannel+SocketChannel:Datei wird nur teilweise übertrage Netzwerkprogrammierung 4
J Gibts die Datei? Netzwerkprogrammierung 3
K Datei-Upload per FTP Netzwerkprogrammierung 2
G Fehlermeldung beim Erzeugen der WSDL Datei unter Axis Netzwerkprogrammierung 2
S über rmi datei übertragen? Netzwerkprogrammierung 2
J Zeilenweises auslesen aus einer Datei über Server Netzwerkprogrammierung 6
G Datei über ObjectInputStream versenden Netzwerkprogrammierung 8
G.I.Joe Datei per POST übertragen Netzwerkprogrammierung 2
B Umfangreiche Batch Datei (Rmiregistry prüfung + Prog. start) Netzwerkprogrammierung 4
V Einen Eintrag aus einer Zip Datei von einem Server laden Netzwerkprogrammierung 2
M Datei auf einem Server ausführen Netzwerkprogrammierung 4
N Dateigröße einer Datei auf einem HTTP-/Web-Server. Netzwerkprogrammierung 9
W fehlerhafte Datei nach Dateitransfer per ServletOutputStream Netzwerkprogrammierung 2
F Datei senden und empfangen Netzwerkprogrammierung 4
B Via Java Datei zu PHP-Script auf Apache hochladen Netzwerkprogrammierung 4
B knacken bei download von mp3 datei Netzwerkprogrammierung 2
T Datei senden Netzwerkprogrammierung 3
M Datei auf Remoteserver kopieren Netzwerkprogrammierung 8
B Datei speichern unter Netzwerkprogrammierung 10
B Laden einer *.csv Datei von einem Webserver (http-request) Netzwerkprogrammierung 8
R In Text Datei schreiben die auf einem Server liegt Netzwerkprogrammierung 8
S Unix Datei vom Server nach Windows übertragen Netzwerkprogrammierung 8
T Musik-Stream: Server sendet die Datei zu schnell ? Netzwerkprogrammierung 3

Ähnliche Java Themen

Neue Themen


Oben