Salve a tutti, stavo realizzando un piccolo programmino in java con un client che invia una stringa a un server multitheading. Ho riscontrato un problema nella ricezione della stringa da parte del server, vi posto prima il codice del client e poi quello del server:
Codice PHP:
public class client {
public static void main(String[] args) {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in) );
Socket socket = null;
System.out.println("Apertura connessione...");
try {
socket = new Socket("localhost",6799);
} catch (UnknownHostException e) {
e.printStackTrace(); }
catch (IOException e) {
e.printStackTrace(); }
System.out.println("Inserisci il messaggio da inviare al server");
// Legge l'input e lo visualizza sullo schermo
String messaggio = null;
try {
messaggio = br.readLine();
System.out.println("Risposta: " +messaggio); }
catch (IOException e) {
e.printStackTrace(); }
DataOutputStream dos = null;
try {
dos = new DataOutputStream(socket.getOutputStream()); dos.writeUTF(messaggio); }
catch (IOException e1) {
e1.printStackTrace(); }
// Al termine, chiude lo stream di comunicazione e il socket.
try {
dos.close();
br.close();
socket.close(); } catch (IOException e) { e.printStackTrace(); }
System.out.println("Chiusura connessione effettuata"); System.out.println("Attesa risposta..."); } }
server
Codice PHP:
public class server {
private int port;
private ServerSocket s_socket;
private Socket c_socket;
public server(int port){
this.port = port;
if(!startServer())
System.err.println("Errore durate la creazione del Server"); }
private boolean startServer() {
try {
s_socket = new ServerSocket(port); }
catch (IOException ex) {
ex.printStackTrace();
return false; }
System.out.println("Server creato con successo!");
return true; }
public void runServer() {
while (true) {
try {
// Il server resta in attesa di una richiesta
System.out.println("Server in attesa di richieste...");
c_socket = s_socket.accept();
System.out.println("Un client si e' connesso...");
ParallelServer pServer = new ParallelServer(c_socket);
Thread t = new Thread (pServer);
t.start(); }
catch (IOException ex) {
ex.printStackTrace(); } } }
public class ParallelServer implements Runnable {
private Socket c_socket;
public ParallelServer (Socket c_socket) {
this.c_socket = c_socket; }
public void run() {
try {
// Ricava lo stream di output associate al socket e definisce una classe wrapper di tipo BufferedWriter per semplificare le operazioni di scrittura String input = null;
BufferedReader s_br = new BufferedReader(new inputStreamReader(c_socket.getInputStream()) );
input = s_br.readLine();
System.out.println("Received:"+input);
s_br.close();
Random temperatura = new Random();
temperatura.nextInt(41);
if(input.equals("PREVISIONE-TEMPERATURA"))
System.out.println("PREV-METEO-PIPPO\n temperatura prevista"+temperatura);
else
System.out.println("errore"); System.out.println("Benvenuto sul server!\n");
c_socket.close();
System.out.println("Chiusura connessione effettuata"); }
catch (IOException ex) {
ex.printStackTrace(); }
catch (Exception e) {
e.printStackTrace(); } } }
public static void main(String[] args) {
server s = new server(6799);
s.runServer(); } }
Il problema che incontro è nel server quando faccio
codice:
System.out.println("Received:"+input);
in quanto sulla console mi legge il messaggio inviato dal client però con 2 caratteri speciali all'inizio:
Received: (qui ci sono i 2caratteri speciali)PREVISIONE-TEMPERATURA
Preciso che il problema non si ripete invece nel client, ossia quando stampo il messaggio nel client viene visualizzato correttamente..
Vi ringrazio in anticipo per la disponibilità.