![]() |
| | Themen-Optionen | Thema durchsuchen |
| | Nach oben #1 |
| Neuer Benutzer Registriert seit: 14.12.2005
Beiträge: 11
|
Hi in welchem format sollte man Strings verschicken und wie kann man die dann auswerten? im Moment schick ich z.B. ein create:file:testdatei.txt oder ein create:folder:testordner oder sowas wie nachricht und je nachdem was drinsteht soll er halt machen... problem ist aber wenn da in der nachricht ein : drin steht dann kommt der interpreter ja total durcheinander... und wenn nach olli nix mehr kommt wei lman vergessen hat die nachricht anzugeben gibts ne Exception wenn man das nicht in jeder if schleife prüft (kann ja verschiedenen befehle geben mit unterschiedlich vielen nachfolgenden strings...) wie macht man das am besten?
__________________ |
| | |
| | Nach oben #5 | |
| Neuer Benutzer Registriert seit: 14.12.2005
Beiträge: 11
| Zitat:
schön und gut aber da ist dann noch das problem wie ich das ganze verarbeite
__________________ | |
| | |
| | Nach oben #6 |
| Projektleiter Registriert seit: 30.11.2005 Ort: Bottrop
Beiträge: 1.134
|
Ist kein. Wie du das verarbeitest musst du selber wissen. Ein Beispiel wäre, dass du zuerst das erste Kommando aufschlüsselst ("create"), dann guckst, was erzeugt werden soll ("folder") und dann, wie er heißen soll ("testordner"). |
| | |
| | Nach oben #7 | |
| Neuer Benutzer Registriert seit: 14.12.2005
Beiträge: 11
| Zitat:
aber guck doch nochmal in meinen ersten post. ich schrieb da noch was von StringTokenizer und Exceptions..
__________________ | |
| | |
| | Nach oben #8 |
| Projektleiter Registriert seit: 30.11.2005 Ort: Bottrop
Beiträge: 1.134
|
Von StringTokenizer stand da nix. Würde ich dafür aber auch nicht verwenden. Ein einfaches String.split ist da viel effektiver. Du musst halt gucken, ob's noch nen Token gibt, wenn nicht: Fehlermeldung. |
| | |
| | Nach oben #10 |
| Neuer Benutzer Registriert seit: 14.12.2005
Beiträge: 11
|
Nein nein nein Schaut mal wie ich es bisher mache... der thread holt sich daten ausm socket... PHP-Code: PHP-Code: 1. Ich muss für JEDEN if-Zwei 100000000 Abfragen machen ob der und der Slot gefüllt ist... (noch nicht gemacht, wäre ja auch irgendwie bissel heftig nicht?) 2. Username und Nachricht darf kein | enthalten, weil | = tokenizertrennzeichen...
__________________ |
| | |
| | Nach oben #12 |
| Neuer Benutzer Registriert seit: 14.12.2005
Beiträge: 11
|
wie meinst du das mit escapen? "\n"? message\nhallo würde dann doch schon beim readLine() getrennt werden?! Und außerdem, es besteht immernoch das Prob das ich danach noch 1000000 abfragen machen müsste wegen, ist slot 3 gefüllt etc...
__________________ |
| | |
| | Nach oben #13 |
| Neuer Benutzer Registriert seit: 02.09.2004
Beiträge: 22
|
Hi! Escapen heisst, dass die Steuerzeichen in irgendeiner Art und Weise maskiert werden. Zum Beispiel wie mit dem Backslash in Java Strings, denn es muss ja klar werden, dass der Backslash nicht als Steuerzeichen sondern als Textzeichen gemeint ist: Code: System.out.println("Das ist ein Zeilenvorschub \\n");
Das ist ein Zeilenvorschub \n Code: System.out.println("Das ist ein Zeilenvorschub \n");
Das ist ein Zeilenvorschub (hier eine zusätzliche Leerzeile) Wegen den 1000000 Ifs habe ich gerade auch keine Lösung. (Du meinst damit, dass Du in jeder else if Anweisung auch die 2. und 3. Parameter einzeln prüfen musst???? Evtl. lässt sich die lange else if liste umgehen, aber Arbeit ist das in jedem Fall, so lange Du auf die Überprüfung nicht Verzichten willst.) Gruss! Franz |
| | |
| | Nach oben #14 |
| Erfahrener Benutzer Registriert seit: 28.08.2004 Ort: konstanz am bodensee
Beiträge: 190
|
wenn die verbindung von einem java server zu einem java clienten geht, hätte ich einen vorschlag, mit dem du dir die ganze parser arbeit ersparen könntest... du schickst die befehle warscheinlich über einen einfachen OutputStream, am anderen ende wird durch einen InputStream der befehl wieder eingelesen und geparst... mein vorschlag, auf beiden seiten auf die Streams einen ObjectStream erstellen, dann kannst du dir kleine java objekte wie z.B. Befehl,Nachricht erstellen. Diese Objekte müssen das interface Serializable implementieren, danach kann man sie bequem über den ObjectStream verschicken und wieder empfangen. auf server seite sieht das etwa so aus Code: ObjectOutputStream oOut = new ObjectOutputStream(outputStream);
obj1 = new Nachricht('beny','guest1','hallo, was geht ab?');
obj2 = new Befehl('create','file','test.txt');
try{
oOut.writeObject(obj1);
oOut.writeObject(obj2);
} catch(Exception e){
e.printStackTrace();
}
Code:
ObjectInputStream oIn = new ObjectInputStream(inputStream);
obj = oIn.readObject();
if(obj instanceof Befehl){
Befehl command = (Befehl)obj;
System.out.println("befehl empfangen ".command.getName());
} else if(obj instanceof Nachricht){
Nachricht msg = (Nachricht)obj;
System.out.println("nachricht empfangen ".command.getText());
}
|
| | |
| | Nach oben #15 | ||
| Neuer Benutzer Registriert seit: 14.12.2005
Beiträge: 11
| Zitat:
Zitat:
In einem anderen Forum hat man mir den Tipp gegeben mich mal wegen RMI schlau zu machen, damit lassen sich, nachdem was ich beisher gelesen habe, funktionen von objekten auf dem server einfach vom clienten aufrufen über "middleware" als wenn die funktionen lokal verfügbar wären.
__________________ | ||
| | |
| | Nach oben #16 |
| Projektleiter Registriert seit: 30.11.2005 Ort: Bottrop
Beiträge: 1.134
|
Du könntest auch einfach mal OOP lernen... Code: public interface Command {
public void invoke(String cmd);
}
public class CommandChain implements Command {
private Map commands;
public CommandChain() {
commands = new HashMap();
}
public void invoke(String cmd) {
if(cmd == null) {
return;
}
int idx = findEscapedIndex(cmd, 0);
Command command = null;
if(idx != -1) {
String currentCommand = cmd.substring(0, idx);
cmd = cmd.substring(idx+1);
command = (Command)commands.get(currentCommand);
} else {
command = (Command)commands.get(cmd);
}
if(command != null) {
command.invoke(cmd);
}
}
private int findEscapedIndex(String cmd, int from) {
int index = cmd.indexOf(':');
if(index == -1) {
return -1;
}
if(index > 0 && cmd.charAt(index-1) == '\\') {
return findEscapedIndex(cmd, index+1);
}
return index;
}
public void register(String cmd, Command command) {
commands.put(cmd, command);
}
}
// Benutzung
Command chain = new CommandChain();
chain.register("create", new CreateCommandChain());
chain.invoke("create:folder:test");
|
| | |
| | Nach oben #17 | |
| Erfahrener Benutzer Registriert seit: 28.08.2004 Ort: konstanz am bodensee
Beiträge: 190
| Zitat:
wenn du es richtig unabhängig willst, verwende z.B. SOAP. wieso findest du es wirr? du darfst das auch nicht als richtiges programm sehen, sondern mehr als eine idee, ein anstoß oder ein geistesblitz, der aus meinem kopf über die tastatur direkt hier ins forum gelangt ist... währ das ganze über meine ide gegangen würde es vieleicht besser aussehen, aber das hätte mich auch mehr zeit gekostet. und für ein größeres projekt ist das auf jedenfall unfuseliger als dein parser. um so mehr verschiedene befehle du einbaust, um so länger wird deine if else kette in der Parser klasse und du siehst ja selber das ein einfaches anführungszeichen schon alles durcheinander bringen kann für die clientseite hätte ich noch folgende änderungen vorzuschlagen. Code:
Map commandTypes = new HashMap();
commandTypes.put(Befehl.class,new BefehlsAuswerter());
commandTypes.put(Nachricht.class,new NachrichtenAuswerter());
ObjectInputStream oIn = new ObjectInputStream(inputStream);
obj = oIn.readObject();
Auswerter a = commandTypes.get(obj.getClass());
if(a==null){
System.out.println("Unbekannter befehl empfangen: "+obj.getClass().getName());
} else{
a.befehlAuswerten(obj);
}
| |
| | |
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | Thema durchsuchen |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| string auf @ überprüfen | Garnele | PHP-Programmierung | 17 | 06.02.2007 18:16 |
| Problem bei Verarbeitung von Templates (Eigene Klassen) | dago | PHP-Programmierung | 21 | 31.08.2006 16:02 |
| XML aus Datenbank lesen, verarbeiten | Robinson | HTML, XML und CSS | 5 | 27.12.2005 20:30 |
| Textfelder auf verschiedenen Tabs per Observer synchronisieren | Sayang | Desktop-Applikationen und Grafik | 2 | 05.12.2005 19:14 |
| Datei einlesen. | cyberdevil87 | Allgemeine Java-Programmierung | 3 | 27.06.2005 09:22 |