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)
[ESERCIZIO] Chat Java
Ecco il mio codice, se a qualcuno va di confrontarlo (sperando che l'indentazione resti):
import java.io.*;
import java.net.*;
class Client{
String testo;
InputStreamReader reader;
BufferedReader myInput;
Socket s;
OutputStream NetOut;
public Client(String host, int porta){
try{
reader = new InputStreamReader (System.in);
myInput = new BufferedReader (reader);
s = new Socket(host, porta);
NetOut = s.getOutputStream();
} catch(Exception e) {
System.out.println("Errore nell'inizializzazione del Client: "+ e.getMessage() );
System.exit(-1);
}
}
public void disconnetti(){
try {
s.close();
System.out.println("Alla prossima chattata!");
System.exit(-1);
} catch(Exception e) {
System.out.println("Errore nella chiusura della connessione");
System.exit(-1);
}
}
public void invia(){
try {
for (int i=0; i < testo.length(); i++) {
NetOut.write((int)testo.charAt(i));
}
if(testo.equals("quit\n")) disconnetti();
} catch(Exception e) {
System.out.println("Errore nell'invio dei dati");
System.exit(-1);
}
}
public void scrivi(){
try {
System.out.print("Io scrivo:");
testo = myInput.readLine();
testo = testo + '\n';
invia();
} catch(Exception e) {
System.out.println("Errore nell'inserimento dei dati da tastiera");
System.exit(-1);
}
}
}
class Server{
public boolean connesso;
String testo;
InputStreamReader reader;
BufferedReader myInput;
ServerSocket ss;
Socket s;
InputStream NetIn;
public Server(int porta){
try{
ss = new ServerSocket(porta);
s = ss.accept();
NetIn = s.getInputStream();
connesso = true;
} catch(Exception e) {
System.out.println("Errore nell'inizializzazione del Server");
System.exit(-1);
}
}
public void disconnetti(){
try {
s.close();
ss.close();
System.out.println("Alla prossima chattata!");
System.exit(-1);
} catch(Exception e) {
System.out.println("Errore nella chiusura della connessione");
System.exit(-1);
}
}
public void ricevi(){
testo = "";
int c;
try {
System.out.print("Lui scrive: "+ testo);
while ((c = NetIn.read()) != 10) {
System.out.print((char)c);
testo = testo + (char)c;
}
System.out.println();
if(testo.equals("quit")) disconnetti();
} catch(Exception e) {
System.out.println("Errore nella ricezione dei dati");
System.exit(-1);
}
}
}
class futurbaggio {
public static void main(String[] args){
Client Cli = new Client("127.0.0.1",10000);
Server Ser = new Server(10001);
System.out.println("Benvenuto in chat, non devi sapere nulla se non che la sequenza 'quit', senza apici, ti consente di uscire ");
while(true){
Cli.scrivi();
Ser.ricevi();
}
}
}
class roberto {
public static void main(String[] args){
System.out.println("Benvenuto in chat, non devi sapere nulla se non che la sequenza 'quit', senza apici, ti consente di uscire ");
Server Ser = new Server(10000);
Client Cli = new Client("127.0.0.1",10001);
while(true){
Ser.ricevi();
Cli.scrivi();
}
}
}
Alcune considerazioni (dubbi), il prof ha utilizzato come codice intero per il termine della ricezione di dati il -1... ma a me il suo stesso codice ha dato problemi, in pratica il server si bloccava restando in attesa di non so cosa... per questo ho considerato il codice 10 che è quello dell'accapo (ogni messaggio inserito infatti viene fatto terminare da '\n'). Qualcuno mi illumina????
Per l'esecuzione va lanciato prima il client roberto e poi futurbaggio... se non riuscite chiedetemi!
Roberto
__________________
E lo sceriffo americano non lo sa / ma quando parla ride tutta la città / vile fellone vieni a singolar tenzone / unza unza umpappà troppe truppe mariscià.
Non ci voleva l'eruzione della lava / e due piccioni si contendono la fava / sposa bagnata, bambina svergognata / la questione è delicata / come bolle la patata.
Basta! E' finita la festa
[L'ovile delle vanità, Folkabbestia]
Azz! Io l'ho tenuto mooolto più semplice
ho un main() da entrambe le parti e poi i prog si chiudono con un bel Ctrl+C
__________________
?
sigh per me è ancora fuori quota ho fatto java 2 anni fa non lo ricordo praticamente più adesso sto riprendendo.. l'inizio è traumatico
__________________
Supervisore di xbox.multiplayer.it
Originally posted by yeah
Azz! Io l'ho tenuto mooolto più semplice
ho un main() da entrambe le parti e poi i prog si chiudono con un bel Ctrl+C
scusate l'ignoranza abissale, ma questi sono programmi che possono essere scritti solo su pc connessi ad una rete? cioè io non mi posso mettere a casa mia a farli, vero?
Francesco:
forunatamente sì!
Lanciato il server, tutto ok, questo è in ascolto su una porta del pc locale (sul quale è stato lanciato).
Nel codice del client c'è:
s = new Socket("localhost",4500);
che connette il socket 's' alla macchina 'localhost', ovvero il pc su cui lo si ha lanciato (che in questo caso è lo stesso che sta eseguendo il codice del server).
Volendo usare un pc in rete, 'localhost' andrà sostituito con l'idirizzo IP della macchina remota.
In questo caso però, localhost (che equivale all'IP 127.0.0.1) permette di usare client e server sulla stessa macchina.
__________________
?
Esercizio chat base base base
Ho creato un file java cha_1 dove ho un server1 e un client1 e un file chat_2 dove ho un client2 e un server2.
La welcomeSocket del file chat_1 riceve la connessione del client2, e dopo avergli mandato la stringa, si chiude la connessione da entrambe le parti. La welcomeSocket del file chat_1, rimane in ascolto.
A questo punto il codice chat_2 arriva alla creazione della sua WelcomeSocket e il codice chat_1 arriva alla creazione del client1 praticamente, le parti si invertono.
Il server2 riceve la connessione del client1 e dopo avergli mandato la stringa, le socket vengono chiuse. La WelcomeSocket del file chat_2, rimane in ascolto.
Spero sia l'interpretazione giusta, praticamente i file chat_1 e chat_2 simulano la presenza di due macchine una che è prima server e poi client e l'altra che è prima client e poi server.
Se volete posto il codice...Ciauz
io credo che lo scopo dell'esercizio fosse dimostrare di aver capito come far comunicare un client e un server potenzialmente all'infinito (interrompendoli con un semplice CTRL+c) e farli agire in modo alternato: client scrive sulla socket a server, server legge quello che gli manda client, server scrive sulla socket a client, client legge quello che gli manda server, etc....
il tutto reso un pochino più complicato dal fatto che le stringhe che i due si passano vengono prese dall'input di tastiera.
la mia soluzione:
client
server
Re: Esercizio chat base base base
Originally posted by CUBA
Se volete posto il codice...Ciauz
__________________
E lo sceriffo americano non lo sa / ma quando parla ride tutta la città / vile fellone vieni a singolar tenzone / unza unza umpappà troppe truppe mariscià.
Non ci voleva l'eruzione della lava / e due piccioni si contendono la fava / sposa bagnata, bambina svergognata / la questione è delicata / come bolle la patata.
Basta! E' finita la festa
[L'ovile delle vanità, Folkabbestia]
Re: Re: Esercizio chat base base base
Originally posted by futurbaggio
Non so se hai dato un occhio al mio codice ma io praticamente non ho mai fatto chiudere le socket, alternandone apertura e chiusura... dovrebbe essere una sorta di ottimizzazione delle risorse ma è una mia deduzione che non ha pratici riscontri
PS. Nessuno l'ha fatta multiutente?
__________________
~ get Debian! ~ get FreeBSD! ~ get OpenBSD! ~
Scusate ma come va intesa l'alternanza?
Il server può rispondere al client? O semplicemente restituisce la stessa stringa inserita dal client?
Ciao
Ma l'alternanza viene eseguita automaticamente dalla gestione delle seocket di java?
Se io client scrivo il server rimane in attesa fino a che il canale non viene chiuso, e allo stesso modo il client rimane in attesa del server?
Mi riferisco all'esempio di mayetta.
Ciao
il prof l'ha spiegato così:
client chiede connessione
server accetta e aspetta
client scrive per primo e va avanti così:
client -> server : ciao
server -> client: ciao a te
client -> server: ...
....
Re: [ESERCIZIO] Chat Java
Originally posted by futurbaggio
Ecco il mio codice, se a qualcuno va di confrontarlo (sperando che l'indentazione resti):
code:
import java.io.*; import java.net.*; class Client{ String testo; InputStreamReader reader; BufferedReader myInput; Socket s; OutputStream NetOut; public Client(String host, int porta){ try{ reader = new InputStreamReader (System.in); myInput = new BufferedReader (reader); s = new Socket(host, porta); NetOut = s.getOutputStream(); } catch(Exception e) { System.out.println("Errore nell'inizializzazione del Client: "+ e.getMessage() ); System.exit(-1); } } public void disconnetti(){ try { s.close(); System.out.println("Alla prossima chattata!"); System.exit(-1); } catch(Exception e) { System.out.println("Errore nella chiusura della connessione"); System.exit(-1); } } public void invia(){ try { for (int i=0; i < testo.length(); i++) { NetOut.write((int)testo.charAt(i)); } if(testo.equals("quit\n")) disconnetti(); } catch(Exception e) { System.out.println("Errore nell'invio dei dati"); System.exit(-1); } } public void scrivi(){ try { System.out.print("Io scrivo:"); testo = myInput.readLine(); testo = testo + '\n'; invia(); } catch(Exception e) { System.out.println("Errore nell'inserimento dei dati da tastiera"); System.exit(-1); } } } class Server{ public boolean connesso; String testo; InputStreamReader reader; BufferedReader myInput; ServerSocket ss; Socket s; InputStream NetIn; public Server(int porta){ try{ ss = new ServerSocket(porta); s = ss.accept(); NetIn = s.getInputStream(); connesso = true; } catch(Exception e) { System.out.println("Errore nell'inizializzazione del Server"); System.exit(-1); } } public void disconnetti(){ try { s.close(); ss.close(); System.out.println("Alla prossima chattata!"); System.exit(-1); } catch(Exception e) { System.out.println("Errore nella chiusura della connessione"); System.exit(-1); } } public void ricevi(){ testo = ""; int c; try { System.out.print("Lui scrive: "+ testo); while ((c = NetIn.read()) != 10) { System.out.print((char)c); testo = testo + (char)c; } System.out.println(); if(testo.equals("quit")) disconnetti(); } catch(Exception e) { System.out.println("Errore nella ricezione dei dati"); System.exit(-1); } } } class futurbaggio { public static void main(String[] args){ Client Cli = new Client("127.0.0.1",10000); Server Ser = new Server(10001); System.out.println("Benvenuto in chat, non devi sapere nulla se non che la sequenza 'quit', senza apici, ti consente di uscire "); while(true){ Cli.scrivi(); Ser.ricevi(); } } } class roberto { public static void main(String[] args){ System.out.println("Benvenuto in chat, non devi sapere nulla se non che la sequenza 'quit', senza apici, ti consente di uscire "); Server Ser = new Server(10000); Client Cli = new Client("127.0.0.1",10001); while(true){ Ser.ricevi(); Cli.scrivi(); } } }
Off-Topic:
usa i tag [ code ] e [/ code ] (senza spazi ;P)
__________________
http://www.twitter.com/0m4r
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) {} } }
__________________
?
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) {} } }
L'unico modo per ottenere il tuo stesso errore è stato aggiungere e.printStackTrace() tra le graffe del catch e passare un indirizzo sbagliato al costruttore della Socket, dove c'è
code:
connection = new Socket("localhost", 6000);
__________________
?
ho già controllato e ricontrollato quella riga ma nulla....
ti posto il mio cod, è un po diverso dal tuo, ma molto molto simile....
poi ho provato anche a compilare il tuo codice uguale uguale e mi da un problemino...quando compilo il Client(dopo il programma Server) mi compare Client avviato e non mi stampa a video Local>...per poter digitare...esce e basta....
....cmq questo è il miio cod...gli puoi dare un'occhaitaGRAZIE!!
code:
import java.io.*; import java.net.*; class Client { public static void main (String args[]) throws Exception { Socket connection; InputStream Sock_in; OutputStream Sock_out; int c; connection = new Socket("localhost", 6000); System.out.println("Stabilita la connessione"); Sock_in = connection.getInputStream();//Sock_in è di tipo InputStream (=stream di dati in ingresso) Sock_out = connection.getOutputStream();//Sock_out è di tipo OutputStream (=stream di dati in uscita) while (System.in.read() != 10){ System.out.println("Io:"); c = System.in.read(); Sock_out.write((int) c);//che fa??sto metodo? } while (Sock_in.read() != 13){ System.out.println("Server:"+(char)Sock_in.read()); } System.out.println(); connection.close(); } }
L'unico altro modo in cui sono riuscito a replicare l'errore del tuo post precedente è usare due porte diverse nel client e nel server.
Ho poi provato il tuo codice e grosso modo funziona.
Puoi postare anche il codice del server che usi quando, usando il mio codice per il client, ti da il problema di "Client avviato" e poi più nulla?
Anzi, prima fai un'altra prova. Sono solito omettere vari controlli quando scrivo codice alla buona: nel server e nel client, tra le graffe che seguono la catch() metti
e.printStackTrace();
Probabilmente si verifica una eccezione dopo che il client viene avviato.
__________________
?
Ho aggiunto la riga che mi hai detto (al tuo codice, sia al server che client) e....è esattamente questo il risultato (come mi dicevi mi da questa eccezione--molto simile a quella che mi da col mio codice):
Client avviato
java.net.ConnectException: Connection refused: connect
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 Chat_c.main(Chat_c.java:23)
Perchè non si vuole connettere?????????????
boban...quante volte ti ho detto di cambiare i criceti nel tuo PC!!!!
__________________
Break Out
Allora il problema è della socket.
O:
1) Server e client usano 2 porte diverse
2) Qualcosa (es il firewall) blocca la connessione
3) Avvii il client prima che il server sia pronto a ricevere connessioni (dovrebbe essere possibile solo se avvii il client prima del server, ma non mi sembra tu faccia così)
4) Sei terribilmente sfortunato
Se l'opzione è la 4a, riposta il codice di client e server che lo provo sul mio e vedo se a me funziona
[edit] Post 2^9
__________________
?
Originally posted by yeah
Allora il problema è della socket.
O:
1) Server e client usano 2 porte diverse
2) Qualcosa (es il firewall) blocca la connessione
3) Avvii il client prima che il server sia pronto a ricevere connessioni (dovrebbe essere possibile solo se avvii il client prima del server, ma non mi sembra tu faccia così)
4) Sei terribilmente sfortunato
code:
import java.io.*; import java.net.*; class Client { public static void main (String args[]) throws Exception { Socket connection; InputStream Sock_in; OutputStream Sock_out; int c; connection = new Socket("localhost", 6000); System.out.println("Stabilita la connessione"); Sock_in = connection.getInputStream();//Sock_in è di tipo InputStream (=stream di dati in ingresso) Sock_out = connection.getOutputStream();//Sock_out è di tipo OutputStream (=stream di dati in uscita) while (System.in.read() != 10){ System.out.println("Io:"); c = System.in.read(); Sock_out.write((int) c); } while (Sock_in.read() != 13){ System.out.println("Server:"+(char)Sock_in.read()); } System.out.println(); connection.close(); } }
code:
import java.io.*; import java.net.*; class Server { public static void main (String args[]) throws Exception { ServerSocket Connessione; Socket Conn; InputStream Sock_out; OutputStream Sock_in; int c; Connessione = new ServerSocket(6000, 300); Conn = Connessione.accept(); Connessione.close(); System.out.println("Stabilita la connessione"); Sock_out = Conn.getInputStream();//Sock_out è di tipo InputStream (=stream di dati in ingresso) Sock_in = Conn.getOutputStream();//Sock_in è di tipo OutputStream (=stream di dati in uscita) while (Sock_out.read() != 13){ System.out.println("Client:"+(char)Sock_out.read()); } while (System.in.read() != 10){ c = System.in.read(); System.out.println("Server:"); Sock_in.write((int) c); } System.out.println(); Conn.close(); } }
A me funziona senza problemi.
La (2) sembrerebbe quindi essere il problema.
Prova a disattivare il firewall
Tanto per andare sul sicuro, non è che per caso hai una scheda madre Asus con chipset NForce3? Perchè, se non ricordo male, potresti avere un firewall hardware.
__________________
?
Originally posted by yeah
A me funziona senza problemi.
La (2) sembrerebbe quindi essere il problema.
Prova a disattivare il firewall
Tanto per andare sul sicuro, non è che per caso hai una scheda madre Asus con chipset NForce3? Perchè, se non ricordo male, potresti avere un firewall hardware.
Il firewall è quel programma che fra le altre cose controlla i pacchetti in entrata e in uscita sulle tue connessioni di rete.
Che so, hai Norton Internet Security, Zone Alarm, Kerio Personal Firewall?
In caso affermativo disattivalo
__________________
?
macchè....stessa eccezione....non so più che fare, ne a chi chiedere....mah?!?
BadPinguin pensaci tu!!
Anche io non riesco a far funzionare Chat_c e Chat_s... li apro su due diversi prompt e prima il Server... ma ho sempre il seguente mex:
java.lang.NoClassDefFoundError: ser Exception in thread "main"
Qualcuno puo' aiutarmi??
R
Ho risolto! Quando si fa 'java nomefile' non si deve mettere l'estensione .java!!!
R
lol
__________________
Break Out
problema risolto!!!
__________________
Break Out
All times are GMT. The time now is 12:57. | Show all 45 posts from this thread on one page |
Powered by: vBulletin Version 2.3.1
Copyright © Jelsoft Enterprises Limited 2000 - 2002.