Homepage  Il progetto dsy.it è l'unofficial support site dei corsi di laurea del Dipartimento di Scienze dell'Informazione e del Dipartimento di Informatica e Comunicazione della Statale di Milano. E' un servizio degli studenti per gli studenti, curato in modo no-profit da un gruppo di essi. I nostri servizi comprendono aree di discussione per ogni Corso di Laurea, un'area download per lo scambio file, una raccolta di link e un motore di ricerca, il supporto agli studenti lavoratori, il forum hosting per Professori e studenti, i blog, e molto altro...
In questa sezione è indicizzato in textonly il contenuto del nostro forum


.dsy:it. .dsy:it. Archive > Didattica > Corsi N - Z > Reti di calcolatori
Pages: [1] 2 
[info] Appello 1 Aprile
Clicca QUI per vedere il messaggio nel forum
urcodiaz
Ciao a Tutti!

Volevo sapere se coloro che hanno dato la parte di laboratorio negli ultimi tre appelli (gennaio, febbraio, marzo) si ricordavano quali fossero le richieste del docente.
Ripeto: la parte di laboratorio!!
Ho già letto qualcosa a proposito scritto da futurbaggio...
Sembrerebbe che di codice vero e proprio da scrivere ci sia solo java...su c solo domande sulle primitive...
altre informazioni?
Ringrazio tutti!!

CiaoCiao!

Flavia
Allora, ti faccio un breve riassuntino!

La parte di laboratorio consta di 4 moduli:
-Primo modulo: domande a risposta chiusa sul linguaggio C. Riguardano i metodi e i parametri da passare soprattutto. Se studi sulle slide di Cassiano, a un 90% ti assicuro che puoi arrivare ( :D )
-Secondo, terzo e quarto modulo: scrittura del CODICE che esegue una particolare richiesta. La richiesta è la stessa per tutti e quattro i turni dell'esame, solo che due di questi dovranno implementarla in UDP, due in TCP.

Negli ultimi due esami (quello del 28 Gennaio e quello del 1 Marzo) i tre moduli su Java chiedevano rispettivamente il client, il server e il server multithread di un programma che rispondeva a certe richieste..quindi PENSO proprio che anche all'appello del primo aprile si chiederà di implementare un client, un server e un server multithread, ovviamente che faranno cose diverse da quelle richieste nei precedenti appelli!

All'appello del 1 Aprile le consegne erano queste:
-il client invia una stringa, del tipo "2+4" (che decide il client stesso) al server
-Il server passa la richiesta a un thread, quindi al server multithread
-il server thread calcola il risultato e lo rimanda al client
-il client calcola se il numero è pari o dispari e rinvia questa "scoperta" al server multithread
-il server multihtread riceve il risultato!

E così dovevi scrivere 3 diversi file, ognuno che implementava rispettivamente il client, il server e il server multithread.
Le questioni un po'più "spinose" erano che il client doveva inviare la STRINGA con l'operazione e il server doveva, con il StringTokenizer, convertirla in numeri e calcolare la somma/differenza/prodotto/divisione. Poi magari era importante ricordarsi che per calcolare se un numero è pari o dispari usi la funzione "%" che calcola il resto...
..ma queste erano "bazzecole"..l'importante era far vedere che sapevi come usare un socket e come crearla, e come creare gli stream!

All'appello del 28 Gennaio non ricordo cosa avesse chiesto. Comunque era sempre un client che faceva una richiesta a un server multithread che poi faceva partire un thread!

:ciao:

boban
scusa Flavia, ma il server multithread di cui parli equivale a dire multiutente?

Flavia
Si, un server multithread che fa "partire" tanti thread diversi associati a vari processi!
Ovvero nella classe server avrai solamente una cosa del genere:
{
.....
Socket socket;
while(true) {
ServerThread t= new ServerThread(socket);
t.start();}
..}

e tutte le funzioni/operazioni le implementi nella classe

class ServerThread extends Thread

che implementerà un costruttore ServerThread e un metodo run che svolge proprio le fuznioni richieste (calcolare una somma ad esempio!).

Chiaro?Quindi il server "normale" si preoccupa solo di far partire un thread, non esegue nessun altra operazione o calcola, quindi "sbologna" tutto il lavoro al thread "t", che è un oggetto di tipo ServerThread.
Le sue azioni e il costruttore verranno indi implementate in una nuova classe, "ServerThread" che estende la classe Thread!
:-D

Se vuoi e se trovo tempo, ti scrivo il codice che ho fatto io all'esame!
:ciao:

boban
Originally posted by Flavia

Se vuoi e se trovo tempo, ti scrivo il codice che ho fatto io all'esame!
:ciao:




grazie...se riesci, ancor meglio...grazie!:D;):approved:

urcodiaz
se lo posti mi fai un favorone grazie!!

GinoPilotino
Originally posted by Flavia
Se vuoi e se trovo tempo, ti scrivo il codice che ho fatto io all'esame!
:ciao:

è una ruota che gira :D

urcodiaz
Per le domande su c chiede anche i vari tipi di errore?
Da quello che ho capito la programmazione c'è solo in java...ovvio che bisogna sapere anche quella in c, ma di codice vero e proprio da scrivere c'è solo java...confermate?

joker402
Originally posted by urcodiaz
Da quello che ho capito la programmazione c'è solo in java...ovvio che bisogna sapere anche quella in c, ma di codice vero e proprio da scrivere c'è solo java...confermate?
fino a ora si, ha chiesto di scrivere codice solo in java.

urcodiaz
-Secondo, terzo e quarto modulo: scrittura del CODICE che esegue una particolare richiesta. La richiesta è la stessa per tutti e quattro i turni dell'esame, solo che due di questi dovranno implementarla in UDP, due in TCP.

Ok, ma il server multithread utilizza il protocollo tcp, quindi chi ha avuto l'udp era solo per l'esercizio di completamento...giusto?

francesco2
Originally posted by urcodiaz
-Secondo, terzo e quarto modulo: scrittura del CODICE che esegue una particolare richiesta. La richiesta è la stessa per tutti e quattro i turni dell'esame, solo che due di questi dovranno implementarla in UDP, due in TCP.

Ok, ma il server multithread utilizza il protocollo tcp, quindi chi ha avuto l'udp era solo per l'esercizio di completamento...giusto?


Questa è una domanda interessante, la parte in java il programmma è sempre solo tcp? O no:?

urcodiaz
scusate, un'altra domanda cretina...ma i programmi devono essere compilati al momento completamente funzionanti oppure si tratta di un documento da completare tipo verifica?

Flavia
Non so per la parte UDP.
i programmi non vanno compilati, li scrivi in blocco notes e basta!
:-D

marduk1983
Originally posted by Flavia
Se vuoi e se trovo tempo, ti scrivo il codice che ho fatto io all'esame!
:ciao: [/B]


interesserebbe anche a me!
thanx in advance :)

DOC

mt661588
ciao ragazzi io ho provato a scrivere il codice per gli esercizi dell'esame provate a controllarli io ero al quarto turno ed avevo lo stesso esercizio della Flavia
qualcuno mi può mandare un pm con scritto come si fa ad alleare i file grazie !!!!!!!!!!!!!!

scusate l'indentazione ma non so come si fa a tenere l'ordine con il forum.
ciao
codice:

SERVER


import java.io.* ;
import java.net.* ;

public class Server {

static ServerSocket ss ;

public static void main ( String[] args ) {
try {
ss = new ServerSocket ( 12000 , 300 ) ;
while ( true ) {
Socket sock = ss.accept() ;
ServerThread t ;
t = new ServerThread ( sock ) ;
t.start() ; }
} catch ( Exception e ) {
e.printStackTrace() ;
}
}
}



CLIENT

import java.io.* ;
import java.net.* ;

public class Client {

static Socket service ;
static OutputStream out ;
static InputStream in ;
static InputStreamReader reader ;
static BufferedReader myInput ;

public static void main ( String[] args ) {
try {
service = new Socket ( "localhost" , 12000 ) ;
out = service.getOutputStream() ;
in = service.getInputStream() ;
System.out.println( "Inserisci l'operazione da effettuare, gli operandi devono essere separati da uno spazio" );
reader = new InputStreamReader ( System.in ) ;
myInput = new BufferedReader ( reader ) ;
String frase = myInput.readLine() ;
frase = frase + '\n' ;
for ( int i = 0 ; i < frase.length() ; i++ ) {
out.write ( ( int ) frase.charAt ( i ) ) ;
}

int c ;
String ris = "" ;
while ( ( c = in.read() ) != 10 ) {
ris = ris + ( char ) c ;
}
int risultato = Integer.parseInt ( ris ) ;
if ( risultato != -1 ) {
System.out.println ( "Il risultato e' " + risultato ) ;
if ( ( risultato % 2 ) == 0 ) {
out.write ( 0 ) ;
} else {
out.write ( 1 ) ;
}
} else {
System.out.println("Non e' possibile effettuare l'operazione");
}
service.close() ;
} catch ( Exception e ) {
e.printStackTrace() ;
}
}
}


SERVERHTREAD

import java.io.* ;
import java.net.* ;
import java.util.* ;
import java.lang.* ;

public class ServerThread extends Thread {

static Socket service ;
static OutputStream out ;
static InputStream in ;
StringTokenizer token ;
int risultato ;

public ServerThread ( Socket s ) {
service = s ;
}

public void run() {
try {
out = service.getOutputStream() ;
in = service.getInputStream() ;
String frase = "" ;
int c ;
while ( ( c = in.read() ) != 10 ) {
frase = frase + ( char ) c ;
}
token = new StringTokenizer ( frase , " " ) ;
int num1 = Integer.parseInt ( token.nextToken() ) ;
char op = token.nextToken().charAt ( 0 ) ;
int num2 = Integer.parseInt ( token.nextToken() ) ;

switch ( op ) {
case '+' :
risultato = num1 + num2 ;
break ;
case '-' :
if ( num1 > num2 ) {
risultato = num1 - num2 ;
} else {
risultato = -1 ;
}
break ;
case '*' :
risultato = num1 * num2 ;
break ;
case '/' :
if ( num1 > num2 ) {
risultato = num1 / num2 ;
} else {
risultato = -1 ;
}
break ;
}
String ris = Integer.toString ( risultato ) + '\n' ;
for ( int j = 0 ; j < ris.length() ; j++ ) {
out.write ( ris.charAt ( j ) ) ;
}

int risposta = in.read() ;
if ( risposta == 0 ) {
System.out.println ( "Il risultato e' pari" ) ;
} else {
System.out.println ( "Il risultato e' dispari" ) ;
}
service.close() ;
} catch ( Exception e ) {
e.printStackTrace() ;
}
}
}

yeah
Usa i tag {code} e {/code}, con le parentesi quadre :)

Qual'è il problema con il codice?

mt661588
ho voluto solo postarlo se qualcuno lo controlla è meglio credo di averlo fatto giusto, magari può essere utile a qualcuno ciao

marduk1983
infatti io ti ringrazio!!!
tanx :cool:

Originally posted by mt661588
ho voluto solo postarlo se qualcuno lo controlla è meglio credo di averlo fatto giusto, magari può essere utile a qualcuno ciao

urcodiaz
scusate ma se uno non ha mai programmato in java, come fa, una volta sistemata la struttura del client e del server, a scrivere il codice con le richieste effettive del client e le risposte del server?
Invento al momento?
E' fondamentale che sia giusto tutto o l'importante è solo che la struttura client server sia corretta?

yeah
Originally posted by mt661588

ho voluto solo postarlo se qualcuno lo controlla è meglio credo di averlo fatto giusto, magari può essere utile a qualcuno ciao

ah ok :)

Originally posted by urcodiaz

scusate ma se uno non ha mai programmato in java, come fa, una volta sistemata la struttura del client e del server, a scrivere il codice con le richieste effettive del client e le risposte del server?
Invento al momento?
E' fondamentale che sia giusto tutto o l'importante è solo che la struttura client server sia corretta?

Penso che un po di pratica sarebbe stata di aiuto. Se ne hai inventare al momento riesce più facile.

Dipende da cosa intendi per struttura: se sbagli un ';' o metti un != invece di un == in una condizione è meno grave che scrivere send() invece che revc() :)

josh
ciao a tutti,volevo farvi una semplice domanda, ma l'esame del 1 aprile, in particolare la teoria cosa sarà strutturata?

Crocette o croccette, domande aperte, V o F?

grazie mille.

marduk1983
se ne hai la possibilità potresti mettere qualke spiegazione del tuo codice per ki come me non è che ci capisca troppo?
TANX!!!!!
ciauu

Originally posted by mt661588
ho voluto solo postarlo se qualcuno lo controlla è meglio credo di averlo fatto giusto, magari può essere utile a qualcuno ciao

papousek
Originally posted by mt661588
ho voluto solo postarlo se qualcuno lo controlla è meglio credo di averlo fatto giusto, magari può essere utile a qualcuno ciao


grazie mille...una domanda...ma il tuo codice postato è per TCP o UDP??

papousek
Originally posted by Flavia
Si, un server multithread che fa "partire" tanti thread diversi associati a vari processi!
Ovvero nella classe server avrai solamente una cosa del genere:
{
.....
Socket socket;
while(true) {
ServerThread t= new ServerThread(socket);
t.start();}
..}

e tutte le funzioni/operazioni le implementi nella classe

class ServerThread extends Thread

che implementerà un costruttore ServerThread e un metodo run che svolge proprio le fuznioni richieste (calcolare una somma ad esempio!).

Chiaro?Quindi il server "normale" si preoccupa solo di far partire un thread, non esegue nessun altra operazione o calcola, quindi "sbologna" tutto il lavoro al thread "t", che è un oggetto di tipo ServerThread.
Le sue azioni e il costruttore verranno indi implementate in una nuova classe, "ServerThread" che estende la classe Thread!
:-D

Se vuoi e se trovo tempo, ti scrivo il codice che ho fatto io all'esame!
:ciao:


da quella che ha scritto flavia...ho dedotto queste cose...(correggetemi se sbaglio)..allora...

se devo implementare un serverThread...nel mio file di testo...(per la parte del server)...inserisco la classe Server e la classe ServerThread exitends Thread giusto??

quindi quello di cui ha parlato flavia prima era un serverthread..nn un server multithread...o mi sbaglio??nn ci sto a capi piu niente DIAMINE...

la differenza tra serverThread e multiThread in termini di codice....QUAL E'????

GRAZIE SAI...

mt661588
questo e il serverThread

import java.io.* ;
import java.net.* ;
import java.util.* ;
import java.lang.* ;

public class ServerThread extends Thread {

static Socket service ;
static OutputStream out ;
static InputStream in ;
StringTokenizer token ;
int risultato ;

// Costruttore del thread, ricevo la socket.
public ServerThread ( Socket s ) {
service = s ;
}

public void run() {
try {
// Inizializzo OutputStream.
out = service.getOutputStream() ;
// Inizializzo InputStream.
in = service.getInputStream() ;

/* Ricevo l'operazione dal client, la trasferisco
* all'interno di una stringa.
*/
String frase = "" ;
int c ;
while ( ( c = in.read() ) != 10 ) {
frase = frase + ( char ) c ;
}

// Creo uno StringTokenizer su frase per dividere gli operandi.
token = new StringTokenizer ( frase , " " ) ;
// Estraggo il primo numero.
int num1 = Integer.parseInt ( token.nextToken() ) ;
// Estraggo l'operatore.
char op = token.nextToken().charAt ( 0 ) ;
// Estraggo il secondo numero.
int num2 = Integer.parseInt ( token.nextToken() ) ;

// Casi dell'operatore.
switch ( op ) {
// Caso della somma.
case '+' :
risultato = num1 + num2 ;
break ;
/* Caso della differenza, se num1 < num2 allora
* non è possibile fare la differenza.
*/
case '-' :
if ( num1 > num2 ) {
risultato = num1 - num2 ;
} else {
risultato = -1 ;
}
break ;
// Caso della moltiplicazione.
case '*' :
risultato = num1 * num2 ;
break ;
/* Caso della divisione, se num1 < num2 allora
* non è possibile fare la divisione.
*/
case '/' :
if ( num1 > num2 ) {
risultato = num1 / num2 ;
} else {
risultato = -1 ;
}
break ;
}

// Creo una stringa con il risultato e un endline.
String ris = Integer.toString ( risultato ) + '\n' ;
// Passo il risultato al client.
for ( int j = 0 ; j < ris.length() ; j++ ) {
out.write ( ris.charAt ( j ) ) ;
}

// Ricevo una risposta dal client.
int risposta = in.read() ;
// Controllo se la risposta è pari o dispari.
if ( risposta == 0 ) {
System.out.println ( "Il risultato e' pari" ) ;
} else {
System.out.println ( "Il risultato e' dispari" ) ;
}

// Chiudo la connessione.
service.close() ;
} catch ( Exception e ) {
e.printStackTrace() ;
}
}
}


questo è il client

import java.io.* ;
import java.net.* ;

public class Client {

static Socket service ;
static OutputStream out ;
static InputStream in ;
static InputStreamReader reader ;
static BufferedReader myInput ;

public static void main ( String[] args ) {
try {
// Creo una Socket per comunicare con il server sulla stessa macchina.
service = new Socket ( "localhost" , 12000 ) ;
// Iniziallizzo OutputStream.
out = service.getOutputStream() ;
// Iniziallizzo InputStream.
in = service.getInputStream() ;
System.out.println( "Inserisci l'operazione da effettuare separando gli operatori da uno spazio" );

// Inizializzo le variabili per leggere da tastiera.
reader = new InputStreamReader ( System.in ) ;
myInput = new BufferedReader ( reader ) ;
// Leggo ciò che l'utente ha inserito.
String frase = myInput.readLine() ;
// Aggiungo '\n' per far terminare la stringa.
frase = frase + '\n' ;

// Passo al server l'operazione da effettuare.
for ( int i = 0 ; i < frase.length() ; i++ ) {
out.write ( ( int ) frase.charAt ( i ) ) ;
}

// Ricevo il risultato dal server.
int c ;
String ris = "" ;
while ( ( c = in.read() ) != 10 ) {
ris = ris + ( char ) c ;
}

// Trasformo la stringa passata in int.
int risultato = Integer.parseInt ( ris ) ;
/* Eseguo un controllo se il risultato è diverso da -1,
* allora stampo il risultato a video e passo al server
* il risultato dell'operazione per il controllo se è pari
* o dispari; altrimenti stampo che non è possibile effettuare
* l'operazione righiesta.
*/
if ( risultato != -1 ) {
System.out.println ( "Il risultato è " + risultato ) ;
if ( ( risultato % 2 ) == 0 ) {
out.write ( 0 ) ;
} else {
out.write ( 1 ) ;
}
} else {
System.out.println("Non è possibile effettuare l'operazione");
}

// Chiudo la connessione.
service.close() ;
} catch ( Exception e ) {
e.printStackTrace() ;
}
}
}

questo è il server


import java.io.* ;
import java.net.* ;

public class Server {

static ServerSocket ss ;

public static void main ( String[] args ) {
try {
// Creo una ServerSocket.
ss = new ServerSocket ( 12000 , 300 ) ;
while ( true ) {
// Accetto di effettuare un servizio per i client.
Socket sock = ss.accept() ;
ServerThread t ;
// Passo ai thread il compito di effettuare le operazioni richieste dal client .
t = new ServerThread ( sock ) ;
// Avvio il thread.
t.start() ;
}
} catch ( Exception e ) {
e.printStackTrace() ;
}
}
} ciao

mt661588
non so rispondere alla tua domanda, cmq quello che ho fatto io è in tcp spero non vi crei problemi nella compilazione ciao

papousek
no..il programma funziona perfettamente..grazie...è questo dubbio tra ServerThread e ServerMultithread che mi da noia...

cmq grazie...inizio a capirci qualcosa...

francesco2
Ma sapete se in qualche turno degli esami passati ( gli ultimi 2 ) è stato richiesto di implementare un client ed un server Udp? Fino ad ora si è sempre parlato solo di tcp multithread, vero?

josh
Ragazzi sono ancora alla prese con il capitolo 3 del libro in italiano, ero arrivato verso la fine vi chiedo chiaramente e prego a chi lo saa di rispondermi..

L'atm va fatti?
il 3.7 (compresi tutti quei sottoparagrafi incasinati)??

Thanks...

ps: risrivo la mia domanda di prima, è il compito (parte teorica) sarà solo a crocettE?


helpp

luna
Originally posted by josh
Ragazzi sono ancora alla prese con il capitolo 3 del libro in italiano, ero arrivato verso la fine vi chiedo chiaramente e prego a chi lo saa di rispondermi..

L'atm va fatti?
il 3.7 (compresi tutti quei sottoparagrafi incasinati)??

Thanks...

ps: risrivo la mia domanda di prima, è il compito (parte teorica) sarà solo a crocettE?


helpp



L'atm va fatto in modo superficiale, mentre l'esame sara' tutto a crocette, ovviamente sto parlando della parte teorica.

Principessa
Originally posted by francesco2
Ma sapete se in qualche turno degli esami passati ( gli ultimi 2 ) è stato richiesto di implementare un client ed un server Udp? Fino ad ora si è sempre parlato solo di tcp multithread, vero?


Certo, nell'appello del 1 Marzo c'era anche client e server UDP!

francesco2
non lo sapevo... pensavo ci fosse da scrivere solo client e server tcp.
Anche perchè l'udp non è multithread.


josh
scusa luna mentre il 3.7 e tutti i suoi sotto paragrafi...
grazie per la risposta precedente...

papousek
Originally posted by francesco2
non lo sapevo... pensavo ci fosse da scrivere solo client e server tcp.
Anche perchè l'udp non è multithread.


e invece no...cè il multithread anche in udp...perche nell ultimo esame...per laboratorio...il modulo 3 (io ero al turno 1) è esattamente Server multiThread Java (UDP) di cui ho fatto un onorevole 0%...nn conoscendo UDP in java....

Salùt!!

...e cmq...nessuno che sappia rispondere alla mia domanda precedente??

...e poi secondo me...l asrgomento UDP in java nn è stato trattato molto bene..e il codice proposto da Cassiano sulle slide Udp in java è un po complesso per i miei canoni....

..aveveano detto che l importante era saper maneggiare le socket e costruirci su qualcosa...ma quel codice (sempre quello di Cassiano),per me è davvero complesso....

Peace

cia
non ci capisco + un tubo...

cmq... tutte le classi utilizzate c'erano nelle risorse?? non che mi siano particolarmente utili...

anch'io vorrei sapere differenza tra thread e multithread... e multithread in udp...

francesco2
Ti ringrazio Papousek, nessuno ha degli esempi veramenti banali da postare?

papousek
esempi??

sul sito del corso...cè un semplice clent e un semplice server fatti alle prime lezioni...

semplicemente..quando il client si connette al server....esso stapma a schermo "Hello networld" o una roba simile...

semplice..da cui si puo partire per ragionare..cmq il tutto è fatto sempre in TCP..e ripeto l UDP in questo corso è stato trattato in modo nn ragionato...tantè che all esame..è stato un crimine chiedere un multithread in udp....o un serverthread...io del codice..nn ho capito granchè...

cmq il sito è

http://reti.dico.unimi.it sezione materilae didattico penso (il file è firstlez.zip)

...nn so postare file

cia
sul sito del prof sono usciti gli assegnamenti... http://homes.dico.unimi.it/~gfp/ReC...ni-01-04-05.xls

Ven 01.04.05 - Ore 09:30 - Silab - Aula Sigma (Turno 1)
Ven 01.04.05 - Ore 11:30 - Silab - Aula Sigma (Turno 2)
Ven 01.04.05 - Ore 15:30 - Silab - Aula Sigma (Turno 3)
Ven 01.04.05 - Ore 17:30 - Silab - Aula Sigma (Turno 4)


francesco2
Ancora grazie, anche io ho più difficoltà con l'udp per ora mi auguro di non trovarmelo, ma spero di capirci qualcosa in più prima di venerdì!

papousek
che sia quella nuova creata ad HOC???

cia
sìssì l'aula sigma è quella! mi sono editato... prima non avevo letto silab-__-

papousek
mmm..quello che mi chiedo ormai da molto..e a cui nn ne vengo a capo è questo...

allora...nell esame ormai è risaputo cio che chiede

1)domande su c
2)client (TCP/UDP a seconda del turno)
3)serverthread (TCP/UDP a seconda del turno)
4)server multithread (TCP/UDP a seconda del turno)

ecco...

mi chiede il client..ok va bene..compilo secondo le richieste...
mi chiede il server thread...ok..creo il server...con il thread...creo il server thread con il costruttore e il metodo run che svolge le richieste datemi dal prof...

ma al server multithread che devo fare???io di esempi nn ho visti...nel codice..che devo scrivere??

AIUTATEMI VE NE PREGO...

josh
Originally posted by josh
scusa luna mentre il 3.7 e tutti i suoi sotto paragrafi...
grazie per la risposta precedente...



please!!

?????

papousek
guarda...io l atm....l ho studiato tutto...nn sapendo se andava fatto o meno...

per cui ti direi di leggerlo....

francesco2
Originally posted by papousek
mmm..quello che mi chiedo ormai da molto..e a cui nn ne vengo a capo è questo...

allora...nell esame ormai è risaputo cio che chiede

1)domande su c
2)client (TCP/UDP a seconda del turno)
3)serverthread (TCP/UDP a seconda del turno)
4)server multithread (TCP/UDP a seconda del turno)

ecco...

mi chiede il client..ok va bene..compilo secondo le richieste...
mi chiede il server thread...ok..creo il server...con il thread...creo il server thread con il costruttore e il metodo run che svolge le richieste datemi dal prof...

ma al server multithread che devo fare???io di esempi nn ho visti...nel codice..che devo scrivere??

AIUTATEMI VE NE PREGO...





E' vero nell'esame di laboratorio c'erano delle domande di teoria di C, qualcuno si ricorda le domande? Che tipo di domande?
Sto incominciando a preoccuparmi sul serio....

francesco2
Ne prendo un pò in giro:

Tutte domande sulle primitive, tipo:
- quali parametri della primitiva socket()devo usare per creare una socket UDP?
- cosa fa la primitiva listen(20)?


Dove si possono trovare le info riguardanti le domande di teoria?

boban
:?:?Ma nelle diapositive di Cassiano UDP e JAVA....quando crea l'oggetto QuoteServerThread...da dove la tira fuori questo tipo di oggetto? non esiste nelle api java....grazie
qualcuno che me lo sa spiegare??

josh
Originally posted by papousek
guarda...io l atm....l ho studiato tutto...nn sapendo se andava fatto o meno...

per cui ti direi di leggerlo....


ah ok! grAZIE..Mentre gli altri paragrafi sempre del libro in italiano come il 3.7.1 (fairness) o 3.7 (quelli del controllo della congestione tcp tipo "partenza lenta" slow start...tu li hai visti/studiati?

Pongo questa domanda anche a tutti gli altri che buttino uno sguardo a questa discussione....scusate se insisto ma non sono un frequentante del corso e quindi non so bene che devo fare...inoltre qui il tempo stringe e sono indietrissimo,sto cercando di capire gli argomente "clou " che non si possono non studiare....

Dato che mi manca ancora il CAP. 5 approffito per chiedervi i paragrafi che volendo si possono saltare perchè non ritenuti importanti...

grazie a tutti, buon studio!

francesco2
Le slide di Cassiano per il C sono quelle: Imparare il C in 3 ore?
Se non sono quelle dove le trovo?

Flavia
Originally posted by francesco2
Ne prendo un pò in giro:

Tutte domande sulle primitive, tipo:
- quali parametri della primitiva socket()devo usare per creare una socket UDP?
- cosa fa la primitiva listen(20)?


Dove si possono trovare le info riguardanti le domande di teoria?


Le slide di Cassiano dal sito reti.dico.unimi.it sono 3:
-UDP e JAVA
-Imparare il C in tre ore
-Socket programming in C with TCP

Le ultime due ti bastano per passare col 90% la parte sul C!

Flavia
Originally posted by boban
:?:?Ma nelle diapositive di Cassiano UDP e JAVA....quando crea l'oggetto QuoteServerThread...da dove la tira fuori questo tipo di oggetto? non esiste nelle api java....grazie
qualcuno che me lo sa spiegare??

L'ha implementato lui..guarda il link nelle slide. Comunque di questo è importante capire come vengono usate le funzioni per il "multisocket" in UDP, cioè come gestire più cose con un solo server in UDP!

Flavia
Originally posted by papousek
guarda...io l atm....l ho studiato tutto...nn sapendo se andava fatto o meno...

per cui ti direi di leggerlo....

Prini aveva detto che sull'ATM bisogna sapere il MINIMO indispensabile!

francesco2
Grazie flavia sei gentilissima.

Flavia
Originally posted by Flavia
Le slide di Cassiano dal sito reti.dico.unimi.it sono 3:
-UDP e JAVA
-Imparare il C in tre ore
-Socket programming in C with TCP



Le ultime due ti bastano per passare col 90% la parte sul C! Studiatevi benissimo questi due blocchetti di slide e siete a posto! Poi scricatevi qua dal dsy, in un thread che non ricordo, esempi di client e server in C, SIA IN TCP CHE UDP, e leggeteveli bene, cercando di cogliere le differenze tra i metodi che usa per il TCP e l'UDP!

Ad esempio, in UDP usa recvfrom e send to, in TCP recv e send. Ecco, solo sapendo questo, avete già fatto due risposto giuste su dieci nella parte di C! :-D

boban
Originally posted by Flavia
Ovvero nella classe server avrai solamente una cosa del genere:
{
.....
Socket socket;
while(true) {
ServerThread t= new ServerThread(socket);
t.start();}
..}


Flavia, quindi all'appello in uno dei tre file txt che devo riempire, basta inserire le righe di codice che implementano la classe server...come quelle che hai scritto tu qui sopra?e basta, vero?


e tutte le funzioni/operazioni le implementi nella classe

class ServerThread extends Thread

che implementerà un costruttore ServerThread e un metodo run che svolge proprio le fuznioni richieste (calcolare una somma ad esempio!).


..e qui (nel secondo file txt, quello del ServerMultithread) dovro implementare il costruttore e il metodo run??

Ho capito bene??
grazie

Flavia
Hai capito benissimo!
La classe server che fa partire il thread sono 4 righe di codice!
E nel serverthread sono due metodi: il costruttore e il run!
:-D

francesco2
Cosa si intende per costruttore? Il programma con tutte le funzioni che deve svolgere?
Il run?
Grazie
Mi rendo conto di non essere molto preparato...

Flavia
allora, prendendo come riferimento la richeista dell'appello del 1 marzo in TCP: scrivi un client che invii una stringa con una operazione al server; il server fa partire un thread che gestirà le funzioni; la classe serverthread calcolerà il risultato dell'operazione e lo restituirà al client; il client ritornerà al server se il risultato è pari o dispari.

Ecco come ho fatto io all'esame:


import java.io.*;
import java.net.*;

class client {
public static void main (String args[]) throws Exception {
String operazione=" 2 + 5";
// è importante mettere gli spazi tra i numeri e il segno di operazione perchè poi useremo la classe Stringtokenizer
int risultato; //il risultato che riceverà dal server
String pari-dispari=" ";
Socket s=new Socket ("localhost", 1234); //1234 è la porta

//creo le variabili rispettivamente per leggere dalla socket e scrivere dalla socket
BufferedReader inFromServer = new BufferedReader (new InputStreamReader(s.getInputStream()));
DataOutputStream outToServer = new DataOutputStream (s.getOutputStream());

//la invio al server
outToServer.writeBytes(operazione);

//ricevo il risultato dal server
risultato=inFromServer.read();

//L'operatore % calcola il resto della divisione
if ((risultato % 2)= 0)
pari-dispari= "Pari";
else
pari-dispari= "Dispari";

// Invio al server nuovamente
outToServer.writeBytes(pari-dispari);

//chiudo la connessione con la serversocket
s.close();
}
}



import java.io.*;
import java.net.*;

class server {
public static void main (String args[]) throws Exception
ServerSocket server=new ServerSocket(4567, 300);
/* creo la serversocket dove 4567 è la porta e 300 è il # max di connessioni che può accettare contemporaneamente*/


//inizio a creare l'oggetto serverthread
while (true) {
//servizio prende la connessione effettuata sul server
Socket servizio=server.accept();
System.out.println("connessione accettata\n");
//passo i parametri al thread e successivamente lo lancio
Serverthread t = new serverthread (servizio);
t.start();
System.out.println("Thread lanciato\n");
}
}



class serverthread extends Thread {
Socket s=null;
String daClient, versoClient;

//Costruttore: semplicmente dice che la coket su cui deve andare in ascolto è quella che gli è stata passata come parametro quando il costruttore è stato invocato nel server
public Serverthread (Socket servizio) {
//metto nella socket s del thread il valore della socket servizio passata dal server
this.s=servizio;
}

public void run() {
try {
System.out.println("Thread in esecuzione\n");
//creo le variabili per leggere e scrivere dalla socket s
BufferedReader inFromClient = new BufferedReader (new InputStreamReader(s.getInputStream()));
DataOutputStream outToClient = new DataOutputStream (s.getOutputStream());

//leggo la stringa inviata dal client
daClient=inFromClient.readLine();

//Uso la classe StringTokenizer per suddividere la stringa che mi è stata inviata in 3 "token", ovvero in tre pezzi: i due addendi e il segno di operazione
StringTokenizer tokenizedLine= new StringTokenizer(daClient);
int a;
int b;
String operatore;
double risultato;
a = getInt.tokenizedLine.nextToken(); //Il primo numero è il primo token
operatore = tokenizedLine.nextToken(); //Il segno di operazione è il secondo token, cioè il secondo pezzo
b = getInt.tokenizedLine.nextToken(); // il secondo numero è il terzo token, cioè il token ancora successivo

//Non ricordo assolutamente se il metodo per trasformare una stringa in intero fosse GetInt..in ogni caso, controllatevi il metodo giusto sul sito della Sun. N.B.:la classe StringTokenizer divide una stringa in tante sottostringhe, quindi i numeri presenti in una stringa vengono considerati STRINGHE, non numeri, chiaro?

switch(operatore) // Io non so che segno di operazione abbia usato il client
case("+"):
risultato=a + b;
case("-"):
risultato=a - b;
case("*"):
risultato=a * b;
case("/"):
risultato=a / b;


outToClient.write(risultato);

//Ricevo il risultato del pari-dispari
String pari-dispari;
inFromClient.readline(pari-dispari);
System.out.println ("Il risultato è un numero +" pari-dispari);

//chiudo la connessione col client
s.close();

}
}


Macheranno di sicuro qualche parentesi e qualcosa sarà errato perchè ho fatto tutto di fretta..comunque il senso è quello!
All'esame è anche possibile consultare la documentazione online dei metodi di Java..quindi se avreste dubbi su come convertire una stringa in intero, su come usare la classe StringTokenizer, su come funziona il DataOutputStream..non preoccupatevi..avete la documentazione (almeno all'ultimo esame era così!!!)
:-D


francesco2
Sei un tesoro!

papousek
io ancora nn capisco....quando ti chiede di sviluppare il server gli mandi il txt della classe Server....quando ti chiede di sviluppare il serverthread gli mandi il txt con la classe ServerThread extends Thread e balle varie...

..ma quando ti chiede di sviluppare il multithread che gli mandi??nn vedo classi Multithread...boh...

ciau

papousek
Originally posted by Flavia
allora, prendendo come riferimento la richeista dell'appello del 1 marzo in TCP: scrivi un client che invii una stringa con una operazione al server; il server fa partire un thread che gestirà le funzioni; la classe serverthread calcolerà il risultato dell'operazione e lo restituirà al client; il client ritornerà al server se il risultato è pari o dispari.

Ecco come ho fatto io all'esame:







Macheranno di sicuro qualche parentesi e qualcosa sarà errato perchè ho fatto tutto di fretta..comunque il senso è quello!
All'esame è anche possibile consultare la documentazione online dei metodi di Java..quindi se avreste dubbi su come convertire una stringa in intero, su come usare la classe StringTokenizer, su come funziona il DataOutputStream..non preoccupatevi..avete la documentazione (almeno all'ultimo esame era così!!!)
:-D


ma tutte ste classi sono un macello....nn ce la faro mai...:(

Flavia
un macello????
Se togli i commenti o la cattiva indentazione sono poche righe di codice, peraltro semplicissimo! :-D

Leggili un po'e fidati!

Flavia
Originally posted by papousek
io ancora nn capisco....quando ti chiede di sviluppare il server gli mandi il txt della classe Server....quando ti chiede di sviluppare il serverthread gli mandi il txt con la classe ServerThread extends Thread e balle varie...

..ma quando ti chiede di sviluppare il multithread che gli mandi??nn vedo classi Multithread...boh...

ciau


Classi multihread??? è il server!

Se guardi la "class server" è appunto la classe di un servermultithread! Cosa significa multithread? che quando riceve una richiesta da un client, "sbologna"il lavoro a un thread, implementato nella classe ServerThread! La classe ServerThread costruisce i thread quindi. E i thread fanno tutto il lavoro richiesto dal client e che il server multithread delega loro!

Client = fa richiesta a un server multirhead (che si chiama così perchè può gestire più richieste contemporaneamente!Come?Semplicemente, facendo partire tanti thread diversi!)

Server multithread = è solo un "attivatore" di thread, non fa nulla se non creare il thread che si occuperà della richeista del client!

Serverthread = è una classe che costruisce thread (con il metodo costruttore) e dice loro cosa fare (metodo run!).

Il server multithread che tu non sai dove pescare è semplicemente la "class server", che si chiama giustamente multithread perchè gestisce la creazione di "multi" (molti) thread!
:ciao:

papousek
grazie...

è che a me java nn mi entra in testa...da sempre....saro stupido...boh..ma riesco solamente a capirci poco....

1000 grazie...

Flavia
No problem!
In bocca al lupo a tutti!
:ciao:

francesco2
Idem, sono un pò tardo pure io...

Flavia
Io per studiare laboratorio di reti avrò ricopiato decine di volte i codici client e server TCP e UDP dal libro..per essere sicura di ricordarmi bene i nomi dei metodi, cosa usare e cosa no..

alla fine diventi "flessibile" anche ad usarli, senza impararli a memoria!
E il codice non è difficile, bisogna imparare cosa vogliono dire i metodi! :-D

papousek
sono due ore che sto facendo dei codici....e nn mi funzionano...perchè??perchè??

******

codice rimosso


******

papousek
sclerando un po...ho creato un semplicissimo client e un semplicissimo server....dove avviene una semplice connessione...se puo servire d aiuto a qualcuno....

CLIENT

import java.io.*;
import java.net.*;

class Clientprova {

public static void main (String args[]) throws Exception
{
Socket connection;

connection = new Socket("localhost", 6000);
System.out.println("Stabilita la connessione");

connection.close();

}
}

SERVER

import java.io.*;
import java.net.*;


class Serverprova {
public static void main (String args[]) throws Exception
{
ServerSocket Connessione;
Socket Conn;

Connessione = new ServerSocket(6000, 300);
Conn = Connessione.accept();
Connessione.close();
System.out.println("Stabilita la connessione");


Conn.close();

}
}

una domanda...se dopo ...(String args[]) metto il throws exception...dopo nn devo mettere la try/catch giusto???o sbaglio??

boban...questo dovrebbe andarti....tiè :D

Flavia
Puoi scegliere tu se metterla o no, ovvero se far gestire queste eccezioni o no!

urcodiaz
ma se trovo da svolgere il server multithread in UDP, devo realizzarlo utilizzando la classe Multicast? Così creo un gruppo a cui invio gli stessi pacchetti...però mi sorge un dubbio...così facendo è come se gestissi più client alla volta? Non avevamo detto che il server multithread per UDP non esisteva??

Altra domanda per le risposte in c: il primo parametro di ogni system call è "int sd" che sarebbe il descrittore della socket...ma è un numero o è il nome della socket? listen(20) vuol dire che si scegle la socket 20 della lista per essere accettata oppure indica il numero di client nella coda e quindi il baclog?

grazie a tutti!

francesco2
Sinceramente non ti saprei aiutare...
se stai provando a svolgere del codice in udp dopo hai voglia di postarlo?

urcodiaz
domanda:

negli esempi che avete postato manca sempre:

TCPClient MyClient = new TCPClient();
MyClient.start();

subito dopo aver scritto il metodo main...

questo si deve mettere sempre o no? Nel server multithread sì...ma nel client e nel server thread?

Grasias!!

Flavia
Originally posted by urcodiaz
ma se trovo da svolgere il server multithread in UDP, devo realizzarlo utilizzando la classe Multicast? Così creo un gruppo a cui invio gli stessi pacchetti...però mi sorge un dubbio...così facendo è come se gestissi più client alla volta? Non avevamo detto che il server multithread per UDP non esisteva??

Altra domanda per le risposte in c: il primo parametro di ogni system call è "int sd" che sarebbe il descrittore della socket...ma è un numero o è il nome della socket? listen(20) vuol dire che si scegle la socket 20 della lista per essere accettata oppure indica il numero di client nella coda e quindi il baclog?

grazie a tutti!



Per la parte in UDP chiedi a qualcuno che l'ha avuta all'esame!Sinceramente non sapendo precisamente la richiesta non ti saprei aiutare!

comunque sd è un numero che è il descrittore della socket, come un identificativo ID.
Listen(20) vuol dire la socket con ID 20 si mette in listen!

:-D

urcodiaz
esiste qualcuno che ha avuto la parte in udp e ci dici come risolvere il server multithread in udp? grazie!

UZI
io devo dare l'esame domani, cmq ti posso dire per certo: lascia stare il multicast, non serve per fare un server multithread... sono due cose diverse.

urcodiaz
ok, capisco...ma se domani mi trovo un server multithread in udp cosa faccio?
Qualcuno mi dice chiaramente se esiste o meno?
Io son sicuro che per fare server multithread si usa tcp che è più sicuro e viene meglio. Sinceramente pensavo che il server multithread in udp non esistesse proprio...Chi ha fatto gli appelli precedenti potrebbe illuminarci?

Grasias!!

UZI
guarda, ti posto il codice (non completo, manca l'elaborazione dei dati del pacchetto, che dipende da cosa è richiesto che faccia il server) di un server multithread udp che ho fatto ieri. questo metodo funziona da quello che ho potuto vedere, ma non mi assumo responsabilità circa la correttezza effettiva in quanto me lo sono inventato di sana pianta... auguri!

code:
import java.util.*; import java.net.*; import java.io.*; class engine extends Thread { byte incoming[]; SocketAddress sender; public engine(byte[] b, SocketAddress s) { incoming = b; sender = s; } public void run() { //...fˆ qualcosa coi dati in incoming byte tbuf[] = new byte[256]; String response = //...scrive la risposta tbuf = response.getBytes(); try{ //invia la risposta DatagramSocket tsock = new DatagramSocket(); DatagramPacket tpack = new DatagramPacket(tbuf, tbuf.length, sender); tsock.send(tpack); System.out.println("pacchetto inviato"); tsock.close(); }catch(Exception e){} } } public class udp_calc_multiser { public static void main (String args[]) { byte buf[] = new byte[256]; DatagramPacket pack = new DatagramPacket(buf, buf.length); try{ DatagramSocket UDPsocklistener = new DatagramSocket(4444); while(true){ UDPsocklistener.receive(pack); new engine(pack.getData(), pack.getSocketAddress()).start(); } }catch(Exception e){} } }

francesco2
Grazieee UZI

papousek
io lo scorso appello ho avuto UDP...e l ultimo modulo..quello del multithread l ho lasciato bianco..appunto perchè...come ripeto...l udp dal mio punto di vista nn è stato propriamente visto a scuola....

cmq...sperem...

foxinho
la vedo grigia domani...:(:(:(

Vale
scusate la domanda ma le domande su C sono a risposta multipla anche quelle o sono aperte?

francesco2
Originally posted by Vale
scusate la domanda ma le domande su C sono a risposta multipla anche quelle o sono aperte?



Magari sbaglio in alcuni esercizi non bisognava inserire del codice in C? Qualcuno si ricorda?

Vale
io per l'UDP ho fatto così che ne pensate?

import java.io.*;
import java.net.*;

public class ServerUDP{

private static DatagramSocket ss= null;

public static void main(String[] args){
try{
ss = new DatagramSocket(12000);

while (true){
byte[] recvData = new byte[1024];
DatagramPacket recvPacket = new DatagramPacket(recvData,recvData.length);
ss.receive(recvPacket);
ServerThreadUDP t= new ServerThreadUDP(ss,recvPacket);
t.start();
}
}catch(Exception e){
e.printStackTrace();
}
}

}


import java.io.*;
import java.net.*;

public class ClientUDP{
private static DatagramSocket socket;
private static InputStreamReader reader;
private static BufferedReader myInput;
private static String LAFRASE= "La frase e':";

public static void main(String[] args){
try{
socket = new DatagramSocket();
InetAddress ipaddress=InetAddress.getByName("localhost");
System.out.println("inserisci la frase:");
reader = new InputStreamReader(System.in);
myInput = new BufferedReader(reader);

byte[] sendData = new byte[1024];
byte[] recvData = new byte[1024];
String frase= LAFRASE+myInput.readLine();
sendData=frase.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, ipaddress, 12000);
socket.send(sendPacket);
DatagramPacket recvPacket = new DatagramPacket(recvData, recvData.length);
socket.receive(recvPacket);
int c;
String recfrase="";
for (int i=0; (c=recvPacket.getData()[i])!=0; i++)
recfrase+= (char) c;

System.out.println("La frase in maiuscolo è :"+recfrase.substring(LAFRASE.length())+" di lunghezza: "+ (recfrase.length()-LAFRASE.length()));

String lung= "La lunghezza e'"+(recfrase.length()-LAFRASE.length())+"\n";
sendData= lung.getBytes();
sendPacket.setData(sendData);
sendPacket.setLength(sendData.length);
socket.send(sendPacket);
socket.close();

}catch(Exception e){
e.printStackTrace();
}
}

}



import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.DatagramSocket;

public class ServerThreadUDP extends Thread {



private static DatagramSocket socket;
private static byte[] recvData;
private static byte[] sendData;
private static DatagramPacket recvPacket;

public ServerThreadUDP(DatagramSocket s, DatagramPacket recvPacket){
socket = s;
this.recvPacket = recvPacket;
recvData= new byte[1024];
sendData= new byte[1024];
}

public void run(){
try{
int c;
String frase="";
for (int i=0 ; (c=recvPacket.getData()[i])!=0; i++)
frase += (char) c;
System.out.println(frase);
InetAddress ipaddress =recvPacket.getAddress();
int porta = recvPacket.getPort();
frase= frase.toUpperCase();
sendData = frase.getBytes();
DatagramPacket sendPacket= new DatagramPacket(sendData, sendData.length, ipaddress, porta);
socket.send(sendPacket);

}catch(Exception e){
e.printStackTrace();
}
}

}

papousek
grazie del codice....mi ci vorra un secolo per decriptarlo....:D

nota di redazione...nn c ho capito na randazza di mazza...

francesco2
é lo stesso esercizio che ha fatto Flavia però in Udp?

Grazie!:)

UZI
guarda, io ti spiego alcune mie considerazioni, prendile con le pinze perchè non fanno riferimento a materiale didattico (che non c'è, o quantomeno non i è stato fornito) ma sono frutto di miei ragionamenti.

nel codice che ho postato io, creo una datagramsocket che ha l'unico scopo di stare in ascolto e ricevere i pacchetti, poi al thread passo non il pacchetto ma i dati che contiene e l'indirizzo di provenienza. questo perchè ho paura che sennò faccia casino, in quanto quando passi il pacchetto non passi una sua copia ma proprio l'area di memoria che lo contiene... quindi alla fine tutti i thread si troverebbero a la vorare sullo stesso buffer e questo non è a mio avviso consigliabile.

cmq, non ho fatto test approfonditi.

urcodiaz
quindi devo usare la classe engine?

yeah
Originally posted by Vale

io per l'UDP ho fatto così che ne pensate?

Che potevi mettere qualche commento :asd:

Vale
e si effettivamente... :-)

~paolo~
ciao, posto il codice di client e server UDP relativi all'esame del 1° marzo in cui veniva richiesto di controllare una stringa contenente un'operazione e visualizzando il risultato ( misono per ora fermato a qst punto senza considerare la parità)..

non riesco a capire perchè qnd lo mando in esecuzione rimane bloccato sulla stringa inserita e il server si sconnette

cleintUDP.java
code:
import java.io.*; import java.net.*; public class clientUDP { public static void main(String args[]) throws Exception { String operazione,frase_server; DatagramSocket client; InetAddress indirizzo; DatagramPacket pacchetto_send, pacchetto_recv; byte[] buffer = new byte[1024]; client = new DatagramSocket(); System.out.println("Inserisci l'operazione (num1 op num2) dove op e' l'operatore:"); BufferedReader from_client = new BufferedReader(new InputStreamReader(System.in)); operazione = from_client.readLine(); buffer = operazione.getBytes(); indirizzo = InetAddress.getByName("localhost"); pacchetto_send = new DatagramPacket(buffer, buffer.length, indirizzo, 7000); client.send(pacchetto_send); pacchetto_recv = new DatagramPacket(buffer, buffer.length); client.receive(pacchetto_recv); frase_server = new String(pacchetto_recv.getData()); System.out.println("Il risultato dell'operazione e':" + frase_server); client.close(); } }



serverUDP.java
code:
public class serverUDP { public static void main(String args[]) throws Exception { ThreadUDP t; t = new ThreadUDP(); t.start(); } }



ThreadUDP.java
code:
import java.io.*; import java.net.*; import java.util.*; public class ThreadUDP extends Thread { DatagramSocket server; DatagramPacket pacchetto_send, pacchetto_recv; InetAddress indirizzo; byte[] dati_recv = new byte[1024]; byte[] dati_send = new byte[1024]; String operazione,op; StringTokenizer operazione_spezzata; int a,b,risultato,porta_client; public void run() { try { while(true) { server = new DatagramSocket(7000); pacchetto_recv = new DatagramPacket(dati_recv, dati_recv.length); server.receive(pacchetto_recv); operazione = new String(pacchetto_recv.getData()); operazione_spezzata = new StringTokenizer(operazione); a = Integer.parseInt(operazione_spezzata.nextToken()); op = operazione_spezzata.nextToken(); b = Integer.parseInt(operazione_spezzata.nextToken()); if (op.equals("+")) risultato = a + b; else if (op.equals("-")) risultato = a - b; else if (op.equals("/")) risultato = a / b; else risultato = a * b; dati_send = (Integer.toString(risultato)).getBytes(); indirizzo = pacchetto_recv.getAddress(); porta_client = pacchetto_recv.getPort(); pacchetto_send = new DatagramPacket(dati_send, dati_send.length, indirizzo, porta_client); server.send(pacchetto_send); server.close(); } } catch (Exception e) {} } }



se riuscite a capire l'errore mi fate un grosso favore :(
grazie in anticipo.
ciao ciao

Paolo

papousek
mi spiace..io parlo un altra lingua...

Sir Punk
codice di merda! FKL!

Sir Punk
guarda non cercare di capire perche non va, copia tutto come un robot rincoglionito e prega che sia abbastanza per passare questo maledetto esame inutile

~paolo~
Originally posted by Sir Punk
guarda non cercare di capire perche non va, copia tutto come un robot rincoglionito e prega che sia abbastanza per passare questo maledetto esame inutile


:) io puntavo di riuscire a passare almeno la parte di lab
per la teoria ci penserò....
:)
cmq mi manca solo qst qll in TCP e l'esempio del libro( trasformare un maiuscolo una stringa) sono riuscito con entrambi i protocolli... bohhhhhh
credo proprio che concludo cosìì

Ciao
Paolo

josh
Originally posted by Sir Punk
guarda non cercare di capire perche non va, copia tutto come un robot rincoglionito e prega che sia abbastanza per passare questo maledetto esame inutile



Se questo lo ritieni inutile non so cosa tu possa pensare riguardo a :
dps
italiano
diritto
economia
IUM!!!!

papousek
siamo OT..torniamo allo splendido e affascinante mondo di JAVA

luna
Intervento del moderatore:
si,siete decisamente OT!Tornate in topic!:)

papousek
Originally posted by ~paolo~
ciao, posto il codice di client e server UDP relativi all'esame del 1° marzo in cui veniva richiesto di controllare una stringa contenente un'operazione e visualizzando il risultato ( misono per ora fermato a qst punto senza considerare la parità)..

non riesco a capire perchè qnd lo mando in esecuzione rimane bloccato sulla stringa inserita e il server si sconnette

cleintUDP.java
code:
import java.io.*; import java.net.*; public class clientUDP { public static void main(String args[]) throws Exception { String operazione,frase_server; DatagramSocket client; InetAddress indirizzo; DatagramPacket pacchetto_send, pacchetto_recv; byte[] buffer = new byte[1024]; client = new DatagramSocket(); System.out.println("Inserisci l'operazione (num1 op num2) dove op e' l'operatore:"); BufferedReader from_client = new BufferedReader(new InputStreamReader(System.in)); operazione = from_client.readLine(); buffer = operazione.getBytes(); indirizzo = InetAddress.getByName("localhost"); pacchetto_send = new DatagramPacket(buffer, buffer.length, indirizzo, 7000); client.send(pacchetto_send); pacchetto_recv = new DatagramPacket(buffer, buffer.length); client.receive(pacchetto_recv); frase_server = new String(pacchetto_recv.getData()); System.out.println("Il risultato dell'operazione e':" + frase_server); client.close(); } }



serverUDP.java
code:
public class serverUDP { public static void main(String args[]) throws Exception { ThreadUDP t; t = new ThreadUDP(); t.start(); } }



ThreadUDP.java
code:
import java.io.*; import java.net.*; import java.util.*; public class ThreadUDP extends Thread { DatagramSocket server; DatagramPacket pacchetto_send, pacchetto_recv; InetAddress indirizzo; byte[] dati_recv = new byte[1024]; byte[] dati_send = new byte[1024]; String operazione,op; StringTokenizer operazione_spezzata; int a,b,risultato,porta_client; public void run() { try { while(true) { server = new DatagramSocket(7000); pacchetto_recv = new DatagramPacket(dati_recv, dati_recv.length); server.receive(pacchetto_recv); operazione = new String(pacchetto_recv.getData()); operazione_spezzata = new StringTokenizer(operazione); a = Integer.parseInt(operazione_spezzata.nextToken()); op = operazione_spezzata.nextToken(); b = Integer.parseInt(operazione_spezzata.nextToken()); if (op.equals("+")) risultato = a + b; else if (op.equals("-")) risultato = a - b; else if (op.equals("/")) risultato = a / b; else risultato = a * b; dati_send = (Integer.toString(risultato)).getBytes(); indirizzo = pacchetto_recv.getAddress(); porta_client = pacchetto_recv.getPort(); pacchetto_send = new DatagramPacket(dati_send, dati_send.length, indirizzo, porta_client); server.send(pacchetto_send); server.close(); } } catch (Exception e) {} } }



se riuscite a capire l'errore mi fate un grosso favore :(
grazie in anticipo.
ciao ciao

Paolo


cmq..penso che uno degli errori..sia di nn aver messo il costruttore con lo stesso nome della classe ThreadUDP...cioè manca proprio quello...un public ThreadUDP(){qualunque cosa}

ciaps

UZI
Originally posted by urcodiaz
quindi devo usare la classe engine?


no, engine è il nome arbitrario che ho dato io al thread. puoi chiamarlo anche pippo, se vuoi! ;)

Powered by: vbHome (lite) v4.1 and vBulletin v2.3.1 - Copyright ©2000 - 2002, Jelsoft Enterprises Limited
Mantained by dsy crew (email) | Collabora con noi | Segnalaci un bug | Archive | Regolamento |Licenze | Thanks | Syndacate