Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258

    spedire messaggi su un socket

    ciao a tutti, ho fatto questo programmino, che riceve e stampa a video un messaggio spedito su una porta. Però mi servirebbe che prima spedisca un messaggio lui. Come fare?
    codice:
    import java.net.*;
    import java.io.*;
    
    public class client {
      public static void main(String args[]) {
        try{
          String host = "127.0.0.1";
    
          Socket s = new Socket(host, 9999);
          
    
          BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
          System.out.println(br.readLine());
          br.close();
          s.close();
    
    
    
        } catch(ConnectException connExc) {
          System.err.println("Non riesco a connettermi al server");
        } catch (IOException e) {
          System.err.println("Problemi...");
        }
      }
    }

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: spedire messaggi su un socket

    Originariamente inviato da Lucked
    Però mi servirebbe che prima spedisca un messaggio lui.
    Prendi l'OutputStream del socket e .... scrivi (direttamente "a byte" o "a caratteri" se lo incapsuli in altro). Dipende dal "protocollo" di comunicazione che ci deve essere tra i due host ... vedo una porta 9999, non so a cosa ti connetti e per fare cosa ....
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258
    devo spedire un array di byte a un programma che gira sul mio computer, che per risposta mi da un altro array di byte.

    ho provato a scrivere, sotto la riga della dichiarazione del nuovo socket, la seguente sola riga, (indispensabile per prendere l'output stream), cosi:
    ServerSocket ss = new ServerSocket(9999);

    ma mi da delle eccezioni, e si blocca sia il programma che uso, sia quello che ho creato. Credo che il problema sia che c'è gia un server che ascolta su quella porta...
    Mi chiedevo se c'erano altri modi per mandare un messaggio.

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Lucked
    devo spedire un array di byte a un programma che gira sul mio computer, che per risposta mi da un altro array di byte.
    Ok, comunque: 1) Dovresti specificare array di quale dimensione ... se è "nota" (al client e/o al server) e 2) Non centrerebbe nulla con quanto hai postato finora.

    Originariamente inviato da Lucked
    ho provato a scrivere, sotto la riga della dichiarazione del nuovo socket, la seguente sola riga, (indispensabile per prendere l'output stream), cosi:
    ServerSocket ss = new ServerSocket(9999);
    No .. stop ... non ci siamo.
    Esisto 2 principali classi in java.net per i socket su TCP: ServerSocket e Socket. La prima classe consente di creare un socket che sta in "ascolto" su una certa porta. Questo è quello che fa normalmente un software "server". La seconda classe consente di aprire una connessione verso un socket in "ascolto" e questo è quello che fa normalmente un software "client".

    Tu devi realizzare client, server o entrambi??
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258
    ho modificato il mio messaggio precedente, rileggilo. E si, devo realizzare una specie di "entrambi", ovvero, mandare un messaggio, e aspettare la risposta, e ripetere questo protocollo all'infinito. La stessa cosa fà il programma dall'altra parte...e io non riesco cmq a implementare la parte che manda il messaggio

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Lucked
    E si, devo realizzare una specie di "entrambi", ovvero, mandare un messaggio, e aspettare la risposta, e ripetere questo protocollo all'infinito.
    Allora:

    a) Devi realizzare una applicazione "client" che usa solo un Socket

    b) Devi realizzare una seconda applicazione "server" che usa principalmente ServerSocket. Un server di questo tipo lo si può fare con un comportamento "iterativo" (detto anche sequenziale) oppure "concorrente". A monte esiste sempre il classico loop che dura a tempo indefinito in cui viene eseguita la accept() sul ServerSocket. Quando viene "accettata" una nuova connessione da un client, la accept() esce e restituisce un Socket che il server userà per comunicare con il client. Se è iterativo, il server "serve" la richiesta direttamente lì (quindi una per volta), altrimenti se è concorrente "serve" la richiesta in un thread separato e torna subito nella accept.

    E comunque, specialmente se la comunicazione tra i due host perdura tanto da scambiarsi più "messaggi", devi stabilire un "protocollo" di comunicazione.

    E dire solo "devo spedire un array di byte e ricevere un array di byte" non basta.

    Un possibile protocollo per scambiarsi array di byte potrebbe essere questo:

    Client: ïnvia 4 byte che formano un int di valore N che indica la lunghezza dell'array di byte, quindi invia N byte dell'array.

    Server: "sa" di dover ricevere prima 4 byte che formano l'int, quindi "sa" di dover ricevere N byte. Quindi invia 4 byte che formano un int di valore N che indica la lunghezza dell'array di byte, quindi invia N byte dell'array.

    E il ciclo si può ripetere finché perdura la connessione.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258
    Devi realizzare una seconda applicazione "server" che usa principalmente ServerSocket.
    ho gia provato, come ho detto, ricevo un eccezione, e si blocca il programma se è in esecuzione il programma con cui interagisco. basta che scrivo questo:
    ServerSocket ss = new ServerSocket(9999);
    e si blocca tutto

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Lucked
    ho gia provato, come ho detto, ricevo un eccezione, e si blocca il programma se è in esecuzione il programma con cui interagisco.
    No mi spiace ... se continuiamo così .... non si arriva ad alcun risultato.

    Dimentica un momento quello che hai fatto (e il poco codice postato) finora. Ti è chiaro, almeno concettualmente, cosa devono fare client e server??
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258
    questo è quello che fa il mio server. Posto il codice.
    import java.net.*;
    import java.io.*;

    public class server{
    public static void main(String args[]) {
    ServerSocket s = null;
    try {
    s = new ServerSocket(9999);
    System.out.println("Server avviato, in ascolto sulla" + "porta 9999");
    } catch (IOException e) {
    e.printStackTrace();
    }
    while(true){
    try {
    Socket s1 = s.accept();
    OutputStream slout = s1.getOutputStream();
    BufferedWriter bw = new BufferedWriter (new OutputStreamWriter(slout));
    bw.write("Ciao client sono il server!");
    System.out.println("Messaggio spedito a " + s1.getInetAddress());
    bw.close();
    s1.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }}}

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Lucked
    questo è quello che fa il mio server. Posto il codice.
    A parte la gestione delle eccezioni che non è il massimo, sì la struttura è quella. Ma così comunque non ti serve a nulla per scambiare "array di byte".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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 © 2026 vBulletin Solutions, Inc. All rights reserved.