Pages (3): « 1 [2] 3 » Show 150 posts per page |
.dsy:it. (http://www.dsy.it/forum/)
- Reti di calcolatori (http://www.dsy.it/forum/forumdisplay.php?forumid=68)
-- [ESERCIZIO] Chat Java (http://www.dsy.it/forum/showthread.php?threadid=13912)
Ma il prof a lezione ha detto che è troppo complicato questo codice... che lui non può correggere 200 compiti così...
lo ignoriamo?
__________________
Killer Coca-Cola
REBOC
www.nococacola.info
ma non è stato gfp (non chiamatelo MAI PROF!!!!) a darvi questo esercizio??
__________________
Il DSY su Facebook!!!
il codice di futurbaggio è stato definito troppo complicato per quello che in realtà è stato richiesto. credo che il mio e quello di yeah si avvicinino di più alla soluzione corretta.... credo
Ma i vostri li avete postati?
Originally posted by Irdwins
Ma i vostri li avete postati?
Intervento del moderatore
prima di postare messaggi inutili è meglio leggere T U T T O il thread. se l'avessi fatto avresti scoperto che, sì, abbiamo postato i nostri codici. per favore cerchiamo di non riempire questo forum di messaggi senza senso: leggete bene e solo dopo postate! grazie.
>Ma il prof a lezione ha detto che è troppo complicato questo codice...
>che lui non può correggere 200 compiti così... lo ignoriamo?
Confermo quanto detto a lezione: soluzioni semplici, senza fronzoli,
usando solo le primitive di base-base-base-base-base-base-base, etc.
Sono felice se alcuni di voi si dilettano di input bufferizzato, di gestione
di eccezioni esotiche, di controllo di condizioni che si verificano solo e
tutt'al più la notte di Halloween, etc. La loro arte raffinata sarebbe
oltremodo utile per un corso di Software Engineering. Ma qui siamo nel
corso di Reti: qualunque dettaglio che oscuri l'obbiettivo principale (che è
poi quello di imparare a mettere in fila, nell'ordine giusto, le primitive per la
manipolazione delle socket) è ridondante per me, e potenzialmente
pericoloso e frustrante per i non aficionados, i quali potrebbero essere
portati a credere che, senza conoscere i dettagli suddetti, l'esame non si
passa. All'esame di guida si richiede che il candidato mostri di saper
cambiare dalla prima alla seconda e dalla seconda alla prima (possibilmente
senza "grattare"), di saper curvare a destra e a sinistra, e di saper
parcheggiare lungo il marciapiedi in uno spazio libero di lunghezza doppia
rispetto a quella dell'autovettura. I parcheggi in derapata in uno spazio
minore della lunghezza della vettura, i sorpassi in curva e a marcia indietro,
etc. non costituiscono materia di esame. Chi li sa fare, li faccia pure, nella
sua vita privata, ma per favore non sia così perfido da postarne un filmato
in questo sito...
Lo dico e lo ripeto: quanto presentato finora a lezione, e nello stile di
programmazione iperspartano che ho usato a lezione, basta e avanza
per superare l'esame di Laboratorio (parte Java con stream socket -
ancora dobbiamo vedere la parte di Java con datagram socket, e le
corrispondenti parti C, ovviamente). Ogni divagazione che vada al di là
di quanto sopra, è tutto tempo prezioso sottratto ad altre attività assai
più remunerative (ivi incluso lo studio di quella che chiamate "la teoria"...).
Il codice postato da Yeah il giorno 11-10-2004 alle 20:24
(l'ultimo post di pagina 1 di questo thread) è quello che più
si avvicina allo spirito del corso, e a ciò che mi aspetto da voi.
Esteticamente parlando, l'unico particolare che avrei
migliorato è il trattamento dei caratteri ASCII 10 e 13.
Anzitutto avrei introdotto due variabili per rappresentarli,
e poi avrei fatto di tutto per rimuovere la dissimmetria
che essi inducono nel codice. Ma qui stiamo discutendo
della differenza tra 30 e lode e 30 e superlode... ;-)
>il codice di futurbaggio è stato definito troppo complicato per quello che
>in realtà è stato richiesto. credo che il mio e quello di yeah si avvicinino
>di più alla soluzione corretta.... credo
Nel tuo codice, a parte dettagli del second'ordine, avrei preferito se tu
non avessi usato il metodo readline() e la sua classe di appartenenza,
usando invece una semplice read()
Inoltre, faccio presente che "la soluzione corretta" non esiste. [Almeno
nella programmazione, cercate di mettere da parte il senso del peccato
che ci è stato inculcato da piccoli in quasi tutti noi sudeuropei...] Esistono
solo soluzioni e non-soluzioni. Tra le prime, alcune sono più gradite di
altre. Il gradimento è dipendente dal contesto in cui ci si trova a operare.
Ciò che è gradito a Reti potrebbe non esserlo a Software Engineering, e
viceversa. Per il corso di Reti, i principi cui ispirarsi sono due:
1. Tutto quello che non c'è non si rompe.
2. La migliore soluzione non è quella in cui non c'è più nulla da
aggiungere, ma quella in cui non c'è più nulla da togliere.
chiedo scusa ma sono nel panico...
ho compilato il codice postato da yeah (l'ultimo post di pagina 1 di questo thread) e funge.
poi devo eseguire prima chat_s.java e poi chat_c.java, giusto? solo che quando li avvio mi appaiono rispettivamente due messaggi con scritto "server avviato" e "client avviato" e poi devo chiudere perchè non posso fare più niente.
forse è per il fatto che il mio pc non è in rete? io ho copiato e incollato il codice di yeah pari pari...
aiuto!
Non afferro appieno come fai a eseguire server e client
Mi pare di capire che cerchi di farli andare insieme sulla stessa riga di comando.
Io faccio così:
ci vogliono due prompt dei comandi.
- nel primo scrivo
"java Chat_s"
- nel secondo
"Java Chat_c"
E' importante fare andare prima il server e poi il client, se fai il contrario il client esce senza fare nulla
Una volta che i due programmi sono partiti (qualche istante dopo i messaggi di "... avviato") sul server compare "Remote> " e sul client compare "Local> ".
"Local>" identifica dove si deve scrivere. Una volta inviato il messaggio tale apparirà sull'altro programma dopo un "Remote> "
__________________
?
ma infatti io faccio come te!! solo che dopo che eseguo Chat_s mi appare la scritta "server avviato" e poi si blocca, non appare nessuna scritta, non posso fare più niente e quindi devo chiudere tutto... mah!!
Ma java non era fatto per essere più portabile del C?
Sicuro che avvii prima il server (Chat_s) e poi il client Chat_c?
Se avvii solo il server questo si blocca sulla riga che visualizza, aspettando la connessione del client.
__________________
?
io avvio prima il server, ma il client non riesco ad avviarlo perchè dopo che avvio il server mi rimane la scritta "server avviato" e non riesco più a fare nulla... va beh, ci rinuncio... grazie comunque!!
Allora scusa, ma davvero usi un prompt solo , per forza non riesci ad usarlo.
Apri 2 diversi prompt, su uno avvii il server e sull'altro il client
__________________
?
Originally posted by yeah
Ecco la mia versione di questo esercizio:
Server - Chat_s.java
code:
import java.net.*; import java.io.*; class Chat_s { public static void main(String args[]) { int c; String localPrompt = "Local> ", // richiesta di input remotePrompt = "Remote> "; // visualizzazione dei caratteri ricevuti ServerSocket listener; // socket di accettazione delle connessioni Socket established; // socket della connessione accettata InputStream sock_in; // Stream di input del Socket OutputStream sock_out; // Stream di output del Socket System.out.println("Server avviato"); try { // Apertura del socket di ascolto listener = new ServerSocket(6000, 300); established = listener.accept(); //connessione accettata listener.close(); //Chiusura del socket di ascolto, non più necessario sock_in = established.getInputStream(); sock_out = established.getOutputStream(); while(true) { /* * Visualizzazione dei caratteri ricevuti * fino alla fine del messaggio, caratterizzato * dal codice del tasto [INVIO] */ System.out.print(remotePrompt); while((c = sock_in.read()) != 13) System.out.print((char) c); // Ritorno a capo System.out.println(); /* * Visualizzazione della richiesta di input * e lettura e invio dei caratteri fino * alla pressione di [INVIO] */ System.out.print(localPrompt); while((c = System.in.read()) != 10) sock_out.write((int) c); } //established.close(); // codice irraggiungibile a causa del while(true) } catch(IOException e) {} } }
code:
import java.net.*; import java.io.*; class Chat_c { public static void main(String args[]) { int c; String localPrompt = "Local> ", // Richiesta di input remotePrompt = "Remote> "; // Visualizzazione dei caratteri ricevuti Socket connection; // Socket di connessione col server InputStream sock_in; // Stream di input del Socket OutputStream sock_out; // Stream di output del Socket System.out.println("Client avviato"); try { // Tentativo di connessione col server connection = new Socket("localhost", 6000); sock_in = connection.getInputStream(); sock_out = connection.getOutputStream(); while(true) { /* * Visualizzazione della richiesta di input * e lettura e invio dei caratteri fino * alla pressione di [INVIO] */ System.out.print(localPrompt); while((c = System.in.read()) != 10) sock_out.write((int) c); /* * Visualizzazione dei caratteri ricevuti * fino alla fine del messaggio, caratterizzato * dal codice del tasto [INVIO] */ System.out.print(remotePrompt); while((c = sock_in.read()) != 13) System.out.print((char) c); // Ritorno a capo System.out.println(); } // connession.close(); // codice irraggiungibile a causa del while(true) } catch(IOException e) {} } }
All times are GMT. The time now is 12:48. | Pages (3): « 1 [2] 3 » Show all 45 posts from this thread on one page |
Powered by: vBulletin Version 2.3.1
Copyright © Jelsoft Enterprises Limited 2000 - 2002.