Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di Becu
    Registrato dal
    Feb 2012
    Messaggi
    22

    [Java]Problema con ServerSocket

    salve a tutti.
    ho un problema co i server socket...cioè il problema consiste nel fatto che io riesco dal client ,attraverso un ObjectOutputStream, a inviare messaggi di testo sul server ma non riesco a fare lo stesso dal server...anche lì ho ussato un ObjectOutpuStream,ma non sembra avere lo stesso funzionamento...
    non rieco a capire perchè! qualcuno mi sa dire come fare?
    "Watson,Non c'è niente di più sfuggente dell'ovvio."

    Sherlock Holmes

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Se mostri che codice hai usato, forse possiamo esserti d'aiuto.

  3. #3
    Utente di HTML.it L'avatar di Becu
    Registrato dal
    Feb 2012
    Messaggi
    22
    hai ragione è vero...

    import java.io.*;
    import java.net.*;
    public class Provider{
    ServerSocket providerSocket;
    Socket connection = null;
    ObjectOutputStream servout;
    ObjectInputStream servin;
    BufferedWriter bw;
    String messagetosocket;
    String messagebysocket;
    boolean i = true;
    Provider(){}
    void run()
    {
    try{
    //1. creazione del socket
    providerSocket = new ServerSocket(2005, 50);
    //2. Attesa del socket
    System.out.println("In attesa di connessione");
    connection = providerSocket.accept();
    System.out.println("Connessione ricevuta da " + connection.getInetAddress().getHostName());
    //3. prendere gli Input e Output stream
    servout = new ObjectOutputStream(connection.getOutputStream());
    servout.flush();
    servin = new ObjectInputStream(connection.getInputStream());
    OutputStream slout = connection.getOutputStream();
    bw = new BufferedWriter (new OutputStreamWriter(slout));

    //4. le due parti comunicano.
    do{
    try{
    do{
    messagebysocket = (String)servin.readObject();
    System.out.println(messagebysocket);
    messagetosocket = Becu.readString();
    sendMessage(messagetosocket);

    }while(i);
    }
    catch(ClassNotFoundException classnot){
    System.err.println("Dati ricevuti in formato sconosciuto");
    }
    }while(!messagetosocket.equals("addio"));
    }
    catch(IOException ioException){
    ioException.printStackTrace();
    }
    finally{
    //4: Closing connection
    try{
    servin.close();
    servout.close();
    providerSocket.close();
    }
    catch(IOException ioException){
    ioException.printStackTrace();
    System.out.println("c'è un problema");
    }
    }
    }
    void sendMessage(String msg)
    {
    try{
    servout.writeObject("server>" + msg);
    servout.flush();
    bw.write("ciao");
    System.out.println("server>" + msg);
    }
    catch(IOException ioException){
    ioException.printStackTrace();
    }
    }
    public static void main(String args[])
    {
    Provider server = new Provider();
    while(true){
    server.run();
    }
    }
    }

    ecco ,questo è il codice che ho usato..perdonatemi se sono disordinato nel gestire le cose..ho cominciato ora..
    "Watson,Non c'è niente di più sfuggente dell'ovvio."

    Sherlock Holmes

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Il serversocket riceve un Socket. Devi avviare il server, e poi avviare il client che stabilirà una connessione con il server.
    Se hai più di un client, ti conviene gestire ogni client in un thread separato, e memorizzarli in una struttura dati (esempio Arraylist).


    Se vuoi altre info, chiedi pure.


    PS: Ricorda una cosa molto importante: quando posti del codice usa il tag code!

  5. #5
    Utente di HTML.it L'avatar di Becu
    Registrato dal
    Feb 2012
    Messaggi
    22
    infatti io avvio sempre prima il server e poi il client...ma il problema rimane sempre quello, ossia che non so in che modo fare sì che sul client si stampi a schermo ciò che digitato sul server...non mi è riuscito trovare una soluzione da nessuna parte...
    quanto sono duro..
    "Watson,Non c'è niente di più sfuggente dell'ovvio."

    Sherlock Holmes

  6. #6
    non uso i socket da un pò quindi sono arruginito.

    il server si mette in ascolto con un accept (se non ricordo male), e una volta ricevuti i dati può elaborarli. il socket è bidirezionale, quindi anche il client, dopo che ha inviato i dati, deve mettersi in ascolto. non ricordo se la sintassi è la stesa (quindi socket.accept()), ma sono sicuro che con i socket è una chiamata bloccante.

    ti consiglio di leggerti/studiarti i datagrampacket e i datagramsocket, che si adattano meglio alle attuali strutture telematiche e che comunque sono sicuramenti più funzionali per la progettazione con lo stile attuale

  7. #7
    Utente di HTML.it L'avatar di Becu
    Registrato dal
    Feb 2012
    Messaggi
    22
    grazie ..è vero..nn ne avevo mai sentito parlare...ma cmq ho dato una letturina veloce e mi sembra che tu abbia ragione...grazie
    "Watson,Non c'è niente di più sfuggente dell'ovvio."

    Sherlock Holmes

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Mi sembra ovvio che entrambi debbano ascoltare nuovi messaggi in arrivo; di solito tramite un loop infinito, ove al suo interno si ha un BufferedReader (del socket appunto).

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.