PDA

View Full Version : JAVA STRINGHE


anna182
24-05-2004, 08:05
Ciao a tutti utilizzo i socket ed ho un po di casini perche devo inviare due codici e non so come distinguerli...
qualcuno sa aiutarmi??

allora il mio server riceve queste due stringe per esempio:

"0B00000034D4D602"
e
"Apri"
ora la prima e il codice di un ibutton la seconda e un comando...
per ora io avevo creato due if:

if(str.equals("0B00000034D4D602")){
String IDUtente = "0B00000034D4D602";
String IDPorta = "5B0000018A1B5409";
verificaAccessi(IDUtente, IDPorta);
if(str.equals("Apri")){
System.out.println("Ho ricevuto la richiesta di apertura della porta");
ApriPorta();
}

solo che strutturato cosi non va bene siccome il giorno in cui avro 200 utenti dovro mettere 200 if fatti cosi:

if(str.equals("0B00000034D4D602")){
String IDUtente = "0B00000034D4D602";
String IDPorta = "5B0000018A1B5409";
verificaAccessi(IDUtente, IDPorta);
if(str.equals("0E0000008F33A802")){
String IDUtente = "0E0000008F33A802";
String IDPorta = "5B0000018A1B5409";
verificaAccessi(IDUtente, IDPorta);

}
....ecc
quindi come faccio a far capire al server in modo semplice veloce e sicuro che la stringa fatta cosi:"0E0000008F33A802"(per esempio)
e un codice e nn un comando???

kingv
24-05-2004, 09:02
non puoi far sì che il server non riceva dal client solo una stringa tipo 0B00000034D4D602 o Apri ma anche l'indicazione di cosa significano?


tipo:

<utente>0B00000034D4D602</utente>
<cmd>Apri</cmd>


così facendo nel server puoi discriminare piu' facilemente se si tratta di un comando o dell'id utente.

Di porta ne hai solo una? In caso negativo come la associ all'utente?

anna182
24-05-2004, 09:16
devo gestire 8 porte...tutte sono identificate da un codice...ma il mio client deve inviare al serer sia il comando che il codice ibutton...pensavo di mettere un prefisso davanti alla stringa ma nn funziona...in che senso <comando></comando>?

kingv
24-05-2004, 09:23
Originariamente inviato da anna182
devo gestire 8 porte...tutte sono identificate da un codice...ma il mio client deve inviare al serer sia il comando che il codice ibutton...pensavo di mettere un prefisso davanti alla stringa ma nn funziona...in che senso <comando></comando>?



nel senso che il client spedisce al server anche una stringa che gli dice cosa contiene quello che gli sta mandando (un comando, un codice, ecc.).


Non ho capito una cosa: il client manda al server un nome di un comando e il codice di un utente. Come fai ad associare l'utente alla porta?

anna182
24-05-2004, 09:33
Allora il mio client legge il codice di un bottone (ogni utente e associato ad un bottone quindi potro avere anche 200 utenti..) quando ha letto il codice lo invia al server. il server effettua un controllo all'interno di un file txt:

(ID PORTA) 5B0000018A1B5409;
(ID UTENTE) 0E0000008F33A802;0B00000034D4D602;
(Permessi) 255;0;

l'utente 1 puo entrare in tutte le porte l'utente2 in nessuna...

ora se l'utente ha il permesso di entrare nella porta il server invia true al client altrimenti ivia false. se il client riceve true attiva dei bottoni in un form e l'utente puo aprire la porta o visualizzarne lo stato...

se decide di aprire la porta cliccchera sul bottone apri e il server ricevera la stringa apri... qui sta il problema...come faccio a distinguere comando da codice?? per ora faccio una serie di if ma quando saranno 200 utenti e 200 comandi nn posso fare 200 if...

Molz
24-05-2004, 09:42
Se spedisci oltre alla stringa delle informazioni su cosa contiene la stringa (come diceva kingv) t dovrebbe andare bene, o no?

Altrimenti invece ke spadire stringhe puoi crearti un oggetto serializzato ke contenga nei vari campi tutte le informazioni ke vuoi e spedire qello con 1 writeObject

anna182
24-05-2004, 09:48
il problema e che a me andrebbe bene qls soluzione ma con le mie conoscenze scarse di java ho difficolta ad implementarle capisci?? non capisco nulla del codice...

monkey72
24-05-2004, 09:52
Originariamente inviato da anna182
il problema e che a me andrebbe bene qls soluzione ma con le mie conoscenze scarse di java ho difficolta ad implementarle capisci?? non capisco nulla del codice...
vabbè, oltre alle cose che già il client invia al server basta che invii anche il tipo di informazione che gli stai inviando codice o comando e implementi di conseguenza il comportamento del server, nel caso di codice controllo accessi per quell'utente, nel caso di comando la rispettiva implementazione...
sarebbero solo due altre info inviate al server, come ti hanno già suggerito...

kingv
24-05-2004, 09:55
Originariamente inviato da anna182

se decide di aprire la porta cliccchera sul bottone apri e il server ricevera la stringa apri... qui sta il problema...come faccio a distinguere comando da codice?? per ora faccio una serie di if ma quando saranno 200 utenti e 200 comandi nn posso fare 200 if...


te l'ho scritto come fare, il client sa se sta mandando un codice o un comando giusto? allora faglielo scrivere a lui così il server non ha difficoltà a capirlo!

e' la soluzione piu' semplice.

anna182
24-05-2004, 09:56
quindi se devo associare il comando ad una variabile ed il codice ad un altra variabile devo fare due funzioni sendToSocket?? visto che la mia ora prende come parametri una stringa (o codice o comando) e li invia al server....:muro:

anna182
24-05-2004, 10:05
quindi se devo associare il comando ad una variabile ed il codice ad un altra variabile devo fare due funzioni sendToSocket?? visto che la mia ora prende come parametri una stringa (o codice o comando) e li invia al server....:muro:

kingv
24-05-2004, 10:21
Originariamente inviato da anna182
quindi se devo associare il comando ad una variabile ed il codice ad un altra variabile devo fare due funzioni sendToSocket?? visto che la mia ora prende come parametri una stringa (o codice o comando) e li invia al server....:muro:


vuol dire che chi chiama il metodo sendToSocket (funzione??? si chiamano metodi) lo fara' cosi' nel caso di un codice:

obj.sendToSocket("<codice>" + codice + "</codice>");

e cosi' nelk caso di un comando

obj.sendToSocket("<cmd>" + comando + "</cmd>");

anna182
24-05-2004, 10:30
Originariamente inviato da kingv
vuol dire che chi chiama il metodo sendToSocket (funzione??? si chiamano metodi) lo fara' cosi' nel caso di un codice:

obj.sendToSocket("<codice>" + codice + "</codice>");

e cosi' nelk caso di un comando

obj.sendToSocket("<cmd>" + comando + "</cmd>");

il mio prof le ha sempre chiamate funzioni...
:cry: NO COMMENT... cmq ok ok quindi dopo aver letto il codice metto
obj.sendToSocket("<codice>" + codice + "</codice>");
e altrimenti
obj.sendToSocket("<cmd>" + comando + "</cmd>");

dopo pero quando il server legge se io gli dico read from socket (codice) capisce??

piccolo problema pero il mio METODO sendToSocket e fatto cosi...

public void sendToSocket(Socket socket, String str)throws IOException{
System.out.println("Stringa inviata: " + str);
oStream = socket.getOutputStream();
for (i=0; i<str.length();i++){
oStream.write(str.charAt(i));
}
oStream.write('\n');
}
quindi non gli devo passare la stringa?? oppure ne faccio due uno per il codice e uno per il comando???

cn73
24-05-2004, 11:04
Non è sbagliato chiamare funzioni quei metodi che restituiscono qualcosa e procedure i metodi void...
cmq hai pvt.

kingv
24-05-2004, 11:05
Originariamente inviato da anna182
quindi non gli devo passare la stringa?? oppure ne faccio due uno per il codice e uno per il comando???


chiamalo una sola volta passando una stringa che comprende già sia il dato che il tipo di dato (codice o comando).

Per concatenare due stringhe puoi usare l'operatore "+" (guarda nell'esempio due post fa).

anna182
24-05-2004, 11:11
Originariamente inviato da kingv
chiamalo una sola volta passando una stringa che comprende già sia il dato che il tipo di dato (codice o comando).

Per concatenare due stringhe puoi usare l'operatore "+" (guarda nell'esempio due post fa).

quindi posso passare lo stesso str alla funzione o metodo o come si vuole chiamare e str la inizzializzo con str = comando + codice??

kingv
24-05-2004, 11:13
Originariamente inviato da anna182
quindi posso passare lo stesso str alla funzione o metodo o come si vuole chiamare e str la inizzializzo con str = comando + codice??

si :incazzed:

anna182
24-05-2004, 11:15
Originariamente inviato da kingv
si :incazzed:

vabbe scusa nn avevo capito....nn e colpa mia se ODIO queste cose e nn ci capisco na mazza...x voi sembra tutto facile per me no...
:cry:

kingv
24-05-2004, 11:22
Originariamente inviato da anna182
vabbe scusa nn avevo capito....nn e colpa mia se ODIO queste cose e nn ci capisco na mazza...x voi sembra tutto facile per me no...
:cry:



:flower: ;)

anna182
24-05-2004, 14:12
per fortuna mi perdoni anche se nn ci capisco una mazza....:D ora provo a mettere in pratica quello che mi hai detto ma nn so se riesco...ho un po di confusione....:boh:

anna182
24-05-2004, 14:29
public static String readFromSocket(Socket socket)throws IOException{
iStream = socket.getInputStream();
String str="";
char c;
while(((c=(char)iStream.read())!= '\n')){
str = str + c;
}
System.out.println("Stringa ricevuta: " + str);
if(str.equals("<ibutton>" + currentId)){
String IDUtente = currentId;
System.out.println("IDUtente " + IDUtente);
String IDPorta = "5B0000018A1B5409";
verificaAccessi(IDUtente, IDPorta);

}

piccolo problema...ora viene stampato Stringa ricevuta: <ibutton>0E0000008F33A802...come faccio a dividerla ora e passargli solo il codice???

kingv
24-05-2004, 14:48
String ibutton = str.substring(9);

dove 9 e' la lunghezza della Stringa "<ibutton>"

anna182
24-05-2004, 15:14
uffaaaaaaaa che nervi perche il pc nn capisce mai nulla??:cry:
adesso ovviamente mi stampa ibutton = 0E0000008F33A802
e codice = ton>0E0000008F33A802... nn riesco ancora a dividere il codice...sono fusa stanca e stufa...come faccio???

public static String readFromSocket(Socket socket)throws IOException{
iStream = socket.getInputStream();
String str="";
char c;
while(((c=(char)iStream.read())!= '\n')){
str = str + c;
}
System.out.println("Stringa ricevuta: " + str);
str = comando + currentId;
comando = str.substring(5);
System.out.println("comando: " + comando);
currentId = str.substring(9);
System.out.println("currentId: " + currentId);
IDUtente = currentId;
System.out.println("IDUtente " + IDUtente);
String IDPorta = "5B0000018A1B5409";
verificaAccessi(IDUtente, IDPorta);
System.out.println("Ho ricevuto la richiesta " + comando );

poi perche nn posso fare una variabile booleana statica?? come faccio a richiamarla in un metodo statico allora??:cry:

kingv
24-05-2004, 15:22
se inizia con <cmd> non puoi chiamare substring con gli stessi parametri...


if (str.startsWith("<ibutton>"))
str=str.substring(9);
else
str=str.substring(5);


Anna non puoi usare il martello per fare andare il codice, dai ;)

anna182
24-05-2004, 15:29
Originariamente inviato da kingv
se inizia con <cmd> non puoi chiamare substring con gli stessi parametri...


if (str.startsWith("<ibutton>"))
str=str.substring(9);
else
str=str.substring(5);


Anna non puoi usare il martello per fare andare il codice, dai ;)

lo so sig sig ma io muca lo sapevo che esisteva startsWhith...uffa...poi ora il prof salta fuori e dice che devo fare un array...di cui nn ho capito una mazza...uffi...ma come fai a trovare tutte le soluzioni???

anna182
24-05-2004, 15:35
uffa percheeeeeeeeeeeeee??? adesso se clicco su un bottone sto deficiente mi legge ancora il codice dell ibutton e nn il comando...ma percheeeeeeeeeee??? :cry: :muro:

kingv
24-05-2004, 15:35
Originariamente inviato da anna182
lo so sig sig ma io muca lo sapevo che esisteva startsWhith...uffa...poi ora il prof salta fuori e dice che devo fare un array...di cui nn ho capito una mazza...uffi...ma come fai a trovare tutte le soluzioni???



e' per quello che ti dico che non puoi usare il martello. :O
pensa, hai una stringa e ti serve sapere se contiere un'altra stringa (oppure nel nostro caso se inizia con un'altra stringa).

Prendi la documentazione, guarda la classe String e scorri tutti i metodi fino a quando trovi (probabilmente) quello che fa al caso tuo.
La prima volta ci perdi 5-10 minuti. Quelle successive pero' ti ricorderai che il metodo esiste e di minuti ne pererai solo 1 a guardare che parametri prende. Dopo un po' di tempo non ci perderai neanche un secondo.

E così per tutte le classi piu' utilizzate (e di sicuro String e' tra queste).

kingv
24-05-2004, 15:36
Originariamente inviato da anna182
uffa percheeeeeeeeeeeeee??? adesso se clicco su un bottone sto deficiente mi legge ancora il codice dell ibutton e nn il comando...ma percheeeeeeeeeee??? :cry: :muro:



qualche dettaglio? cosa ti dice?

anna182
25-05-2004, 07:27
Originariamente inviato da kingv
qualche dettaglio? cosa ti dice?
non mi da molti dettagli semplicemente non invia il comando ma se clicco su un bottone invia il codice dell'ibutton....nn è strano??

anna182
25-05-2004, 07:59
FUNZIONAAAA HIHIH!!!!:D

Angus
25-05-2004, 10:23
:ave: mi inchino davanti alla pazienza di kingv :ave:

kingv
25-05-2004, 10:25
Originariamente inviato da Angus
:ave: mi inchino davanti alla pazienza di kingv :ave:



:ubriachi:




;)

anna182
25-05-2004, 10:39
HA HA HA GRAZIE....MA proprio nn riesco a ridere...:sob:

Angus
25-05-2004, 10:48
Originariamente inviato da anna182
HA HA HA GRAZIE....MA proprio nn riesco a ridere...:sob:

qua non ride nessuno, tantomeno di te. In tempi e modi diversi ci siamo passati tutti. Qualcuno ha abbandonato, qualcuno si illude ancora di potercela fare, qualcuno è impazzito :fiufiu:.
Quando ho dovuto studiare economia :eek: :mc: mi sono sentito esattamente come ti senti tu adesso...

in bocca al lupo!