Socket JAVA !! banale!!

  • Autore discussione Autore discussione CMnet
  • Data d'inizio Data d'inizio
Pubblicità

CMnet

Utente Attivo
Messaggi
218
Reazioni
69
Punteggio
57
Ciao a tutti è da qualche giorno che sto cercando di capire come funzionano le socket in java dato che devo costruire una chat per un progetto scolastico. Non ho capito come mai il server non riesce a vedere il client e quindi a stampare la stringa che gli viene inviata:

CLIENT
Codice:
public static void main(String[] args) throws IOException { 
        //Connessione della Socket con il Server 
        String sentence;
        String mSentence;
        BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in)); 
        Socket socket = new Socket("127.0.0.1", 7777); 
        DataOutputStream os = new DataOutputStream(socket.getOutputStream());
        BufferedReader inFromServer = new BufferedReader(new                                                                       InputStreamReader(socket.getInputStream()));
        sentence = stdIn.readLine();
        os.writeBytes(sentence);
        System.out.println("Inviato: " + sentence);
        mSentence = inFromServer.readLine();
        System.out.print("Dal server: " + mSentence);
        socket.close();
}

SERVER
Codice:
    public static void main(String[] args)  throws IOException { 
        String sentence;
        String mSentence;
        ServerSocket serverSocket = new ServerSocket(7777);
        while(true)
        {
             Socket socket = serverSocket.accept();
             BufferedReader inFC= new BufferedReader(new InputStreamReader(socket.getInputStream()));
             DataOutputStream os = new DataOutputStream(socket.getOutputStream());
             sentence = inFC.readLine();
             mSentence = sentence.toUpperCase();
             os.writeBytes(mSentence);
             System.out.println("Ricevuto: " + sentence);

        }

Se potete illuminarmi su cosa non va in questo codice ne sarei grato se non si fosse capito io vorrei semplicemente scrivere sul client e vederlo stampato anche sul server (in locale).
Tencs...
 
Il codice del server è fondamentalmente sbagliato in quanto hai un accept nel ciclo while che per quello che devi fare è sbagliato. L'accept accetta una nuova connessione, quindi dal secondo ciclo rimarrà in attesa di un ulteriore client e le connessioni precedenti verranno prima o poi droppate perchè non più referenziate.
Il client non è il massimo dell'eleganza.
Mi pare comunque che tu voglia fare un sistema client-echoserver dove il client scrive qualcosa e il server risponde la stessa stringa in uppercase.
Questo codice dovrebbe fare quanto detto:

Client
Codice:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class Client {
    public static void main(String[] args) {
        try (Socket clientSocket = new Socket("localhost",7777)){
            BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
            BufferedReader clientIn = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
            PrintWriter clientOut = new PrintWriter(clientSocket.getOutputStream());
            String outMsg;
            while((outMsg = stdIn.readLine()) != null){
                clientOut.println(outMsg);
                clientOut.flush();
                System.out.println("Server risponde: " + clientIn.readLine());
            }
        } catch (IOException e) {
            System.out.println("Impossibile aprire il socket");
            System.exit(1);
        }
    }
}

Server
Codice:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    public static void main(String[] args){        
        try (ServerSocket server = new ServerSocket(7777)){
            Socket serverSocket = server.accept();
            System.out.println("Client connesso\n\n");
            BufferedReader srvIn = new BufferedReader(new InputStreamReader(serverSocket.getInputStream()));
            PrintWriter out = new PrintWriter(serverSocket.getOutputStream());
            String inMsg;
            while ((inMsg = srvIn.readLine()) != null){
                System.out.println("Server riceve: " + inMsg);
                out.println(inMsg.toUpperCase());
                out.flush();
            }            
        } catch (IOException e) {
            System.out.println("Impossibile aprire il socket");
            System.exit(1);
        }
    }
}
 
Ultima modifica:
Pubblicità
Pubblicità
Indietro
Top