Visualizzazione dei risultati da 1 a 3 su 3

Discussione: Problema Socket

  1. #1

    [Risolto] Problema Socket

    Ciao a tutti!
    Vi posto il codice per l'impletentazione della socket:

    Parte Server:
    codice:
    BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
    System.out.print("inserisci comando: ");
    /* Invio stringa a client */ 
    outToClient.writeBytes(inFromUser.readLine());
    
    /******* Qui il mio server si blocca ma sembra che non invii al Client nulla perchè dall'altra parte non riceve *******/
    
    /* Attendo risposta da client */
    inClient = inFromClient.readLine(); 
    System.out.println(inClientt);
    Parte Client:
    codice:
    DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
    BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
    /* Attendo stringa da Server */
    /******* Qui si blocca il Client *********/
    modifiedSentence = inFromServer.readLine(); 				
    
    BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in)); 
    /* Mando stringa al server */
    outToServer.writeBytes(inFromUser.readLine());
    }

    Praticamente se dal server invio qualcosa al client e poi metto il server in attesa di qualcosa dal client mi si bloccano entrambi...Sapreste spiegarmi il motivo??
    Se per esempio dal server tolgo
    codice:
    inClient = inFromClient.readLine();
    la comunicazione funziona correttamente, cioè il client riceve il messaggio!!!

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    La chiamata

    codice:
    in.readLine();
    Si aspetta di leggere un'intera riga, terminata da un terminatore di riga o da EOF.

    Tu, invece, stai inviando una riga, senza alcun terminatore e senza effettuare alcuna flush().

    Ergo... il server invia una riga senza terminatore di riga, il client aspetta di ricevere il terminatore di riga, o EOF... e tutti e due si fermano.

    Soluzione: nel server aggiungi un terminatore di riga:

    codice:
    BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
    System.out.print("inserisci comando: ");
    /* Invio stringa a client */ 
    outToClient.writeBytes(inFromUser.readLine());
    outToClient.writeBytes("\n");   // Aggiungiamo il terminatore di linea
    outToClient.flush();   // Fa sempre bene un flush!
    
    Ovviamente, stessa cosa nella parte di invio dal client al server.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Grazie mille!


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.