|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Mar 2004
Messaggi: 1118
|
[java]problemi con semplice programmino client server
Vorrei fare un piccolo programma client-server in cui un client,una volta connesso,invia stringhe di testo lette da tastiera al server fino a quando non digito una particolare stringa
Ecco i codici di client e server Server Codice:
import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; import java.util.logging.Level; import java.util.logging.Logger; /** * * @author giovanni */ public class Server { public static void main(String args[]) { ServerSocket ss = null; Socket cs = null; DataOutputStream dos = null; try { ss = new ServerSocket(22222); while (true) { System.out.println("Server in attesa di richieste..."); cs = ss.accept(); System.out.println("Un client si e' connesso..."); InputStream is = cs.getInputStream(); BufferedReader dis = new BufferedReader(new InputStreamReader(is)); System.out.println("Risposta del server: " + dis.readLine()); } } catch (IOException ex) { Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex); } } } Codice:
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.Socket; import java.net.UnknownHostException; import java.util.logging.Level; import java.util.logging.Logger; /** * * @author giovanni */ public class Client { public static void main (String args[]) { System.out.println("client"); Socket s = null; String ss = new String(); InputStreamReader i = new InputStreamReader(System.in); BufferedReader b = new BufferedReader(i); try { s = new Socket("localhost", 22222); OutputStream s1out = s.getOutputStream(); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s1out)); while( ss == null ? "quit" != null : !ss.equals("quit")) { ss = b.readLine(); bw.write(ss); } s.close(); } catch (UnknownHostException ex) { Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex); } catch (IOException ex) { Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex); } } } Grazie |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2776
|
Quali sarebbero i problemi?
|
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Mar 2004
Messaggi: 1118
|
ops,ho dimenticato di scrivere il problema
![]() il server non riceve i messaggi dal client,riceve solo un null quando il client si disconnette |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Dec 2006
Messaggi: 314
|
Sei sicuro di poter utilizzare i BufferedReader e Writer per leggere e scrivere stream di byte da socket?
__________________
Athlon64 x2 5600 - AsRock ALiveNF5eSata2+ - kingston 2GB ddr2 800 - GeForce 8800gts 320MB |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Mar 2007
Messaggi: 7863
|
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Sep 2004
Città: Cosenza
Messaggi: 2971
|
come immaginavi, è un problema molto semplice.
il "b.readline()" ritorna una stringa SENZA fine linea ("\n" o "\r" o "\r\n", in base ai diversi sistemi operativi) quindi quando tu mandi la tua stringa al server con "bw.write(ss)", non gli mandi il fine linea, quindi il server, che è in attesa con "din.readline()", resterà in attesa, proprio perchè "readline()" ritorna una stringa solo quando raggiunge il fine linea. quindi la prima cosa da modificare, è appendere uno "\n" alla stringa ss altra piccola cosa, bisogna fare il "flush()" all'output stream per mandare "subito" il messaggio al server. a quel punto il tuo programmino funziona, ma c'è ancora un piccolo problema, ovvero che il server accetta un client, legge una sola riga mandata da questo, e poi esce e si mette in ascolto di un altro client... come risolvere questo, spetta a te ![]() |
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Mar 2007
Messaggi: 7863
|
Quote:
|
|
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Sep 2004
Città: Cosenza
Messaggi: 2971
|
Quote:
Codice:
ss = new ServerSocket(22222); while (true) { System.out.println("Server in attesa di richieste..."); cs = ss.accept(); System.out.println("Un client si e' connesso..."); InputStream is = cs.getInputStream(); BufferedReader dis = new BufferedReader(new InputStreamReader(is)); System.out.println("Risposta del server: " + dis.readLine()); } è la base da cui partire per rendere il server multiclient... |
|
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Mar 2007
Messaggi: 7863
|
Quote:
|
|
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Mar 2004
Messaggi: 1118
|
ho modificato il client come mi avete detto ma il risultato non cambia anche se durante un tentativo mi è spuntato qualcosa di diverso da null nel server
ecco il codice del client modificato Codice:
public class Client { public static void main (String args[]) { System.out.println("client"); Socket s = null; String ss = new String(); InputStreamReader i = new InputStreamReader(System.in); BufferedReader b = new BufferedReader(i); try { s = new Socket("localhost", 22222); OutputStream s1out = s.getOutputStream(); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s1out)); while( ss == null ? "quit" != null : !ss.equals("quit")) { ss = b.readLine(); bw.write(ss+"\n\r"); s1out.flush(); } s.close(); } catch (UnknownHostException ex) { Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex); } catch (IOException ex) { Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex); } } } se mi corregete il codice dato che si tratta di un paio di righe me lo salvo e me lo prendo come riferimento in futuro grazie |
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Sep 2004
Città: Cosenza
Messaggi: 2971
|
ecco cosa devi cambiare:
Codice:
bw.write(ss+"\n"); bw.flush(); Ultima modifica di deadlyomen17 : 27-05-2010 alle 15:48. |
![]() |
![]() |
![]() |
#12 | |
Senior Member
Iscritto dal: Mar 2004
Messaggi: 1118
|
Quote:
|
|
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Sep 2004
Città: Cosenza
Messaggi: 2971
|
bene...a questo punto sarebbe interessante renderlo multiclient...un server che serve più client, come avviene normalmente..
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:58.