.dsy:it. 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)


Posted by m735 on 12-10-2004 18:11:

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


Posted by Lunik on 12-10-2004 18:22:

ma non è stato gfp (non chiamatelo MAI PROF!!!!) a darvi questo esercizio??

__________________
Il DSY su Facebook!!!


Posted by mayetta on 12-10-2004 19:13:

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 :asd:


Posted by Irdwins on 14-10-2004 16:19:

Ma i vostri li avete postati?


Posted by mayetta on 14-10-2004 16:28:

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.


Posted by gfp on 14-10-2004 21:50:

>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"...).


Posted by gfp on 14-10-2004 22:19:

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... ;-)


Posted by gfp on 14-10-2004 22:34:

>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.


Posted by Francesko on 27-10-2004 09:31:

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!


Posted by yeah on 27-10-2004 21:12:

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> "


:cool:

__________________
?


Posted by Francesko on 29-10-2004 10:37:

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!! :sad:


Posted by yeah on 29-10-2004 10:44:

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.

__________________
?


Posted by Francesko on 29-10-2004 11:29:

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!!


Posted by yeah on 29-10-2004 11:35:

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

__________________
?


Posted by boban on 14-03-2005 11:48:

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) {} } }


Client - Chat_c.java
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) {} } }


:)

Se vi doveste chiedere: "Ma come, il ciclo di input termina con la lettura di 10 e il ciclo di ricezione dal socket termina col 13?"

Il tasto INVIO equivale a 2 codici ascii, 13 e 10 (carriage return e line feed, o il contrario, non ricordo). Quando si preme INVIO, il carattere 10 viene inviato sulla connessione e il 13 termina il ciclo.

Quindi, dall'altra parte, il messaggio ricevuto terminerà con il 10 :)


Ho provato a compilare il tuo codice...compilo il server e tutto ok--attende..poi il client e mi da questo errore:

Exception in thread "main" java.net.ConnectException: Connection refused: connec
t
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:305)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:171)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:158)
at java.net.Socket.connect(Socket.java:452)
at java.net.Socket.connect(Socket.java:402)
at java.net.Socket.<init>(Socket.java:309)
at java.net.Socket.<init>(Socket.java:124)
at Client.main(Client.java:12)

Che significa???Help!!!
Cosa devo fare??


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.