Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Socket che non risponde

    Ciao. Sono nuovo
    Ho un piccolo problema con il seguente esercizio:
    Scrivere in C o Java un programma che:
    1. apra una connessione verso l'IP 151.97.252.4, port 80
    2. invii la stringa "GET /gp/prova/11.aux\n"
    3. nello stream di byte ricevuti individui la prima parentesi quadra aperta
    4. memorizzi tutti i successivi byte fino alla prima parentesi quadra chiusa, che il server invierà, in una variabile stringa denominata "s"
    5. invii, sulla connessione già aperta, la stringa s (attenzione: dovrebbe terminare per "\n")
    6. scriva i byte ricevuti in risposta sulla standard output

    codice:
    import java.net.*;
    import java.io.*;
    
    public class Client
    {
     public static void main(String[] args) throws IOException
     {
      Socket R=null;
    
    
      BufferedReader IN=null;
      BufferedWriter out=null;
      PrintWriter OUT=null;
    
      try //avvio --------------------------------------------------------------------
      {
       R=new Socket("151.97.252.4", 80);
    
       System.out.println("Client is ON! --> "+ R);
    
       IN=new BufferedReader(new InputStreamReader(R.getInputStream())); 		//input
       out=new BufferedWriter(new OutputStreamWriter(R.getOutputStream()));
       OUT=new PrintWriter(out, true);
      }
      catch(Exception e)
      {
       e.printStackTrace();
       System.exit(1);
      }
    
      //invio richiesta -----------------------------------------------------------------
      String richiesta="GET /gp/prova/11.aux\n";
      try
      {
       OUT.println(richiesta);
       System.out.println("Richiesta inviata ...");
      }
      catch(Exception e)
      {
       e.printStackTrace();
       System.exit(1);
      }
    
      //ricevo file ....carattere per carattere ------------------------------------------------------
      String s="";
      boolean registra=false;  //inizia a memorizzare la frase tra le due [] in base a questa variabile
    
      try
      {
       int x=IN.read();
    
       while(x!=-1)   //si suppone che ci siano entrabe le parentesi e che "[" preceda "]"
       {
        char c=(char)x;
        if (x=='[') registra=true;
        if(registra) s=s+c;
        if(x==']') registra=false;
        x=IN.read();
       }
      }
      catch(Exception e)
      {
       e.printStackTrace();
       System.exit(1);
      }
    
    
    
      //invio risposta. Elimino le parentesi quadre ---------------------------------------------------
      String s1=s.substring(1, s.length()-2);
    
      try
      {
       OUT.println(s1+"\n");
       OUT.flush();
      }
      catch(Exception e)
      {
       e.printStackTrace();
       System.exit(1);
      }
    
    
      //ricevo risultato -------------------------------------------------------------------------------
      String s2="";
      try
      {
       int x=IN.read();
    
       while(x!=-1)
       {
        char c=(char)x;
        s2=s2+c;
        x=IN.read();
       }
       System.out.println("Risultato --> "+s2);
      }
      catch(Exception e)
      {
       e.printStackTrace();
       System.exit(1);
      }
    
    
    
    
      OUT.close();
      IN.close();
    
      R.close();
      System.out.println("FINE");
    
     } //fine main
    
    } //fine Client
    Le richieste 5 e 6 non vanno a buon fine e non capisco perchè...il server non mi manda nulla in risposta

    Aiutatemi per favore...non so cosa fare e l'esame è molto vicino

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

    Re: Socket che non risponde

    Originariamente inviato da dereck80
    codice:
      String richiesta="GET /gp/prova/11.aux\n";
    Ciao, non voglio certo essere/sembrare scortese ma ....

    1) La richiesta non è completa/corretta e visto che forse (se ne deduce) non conosci bene il protocollo HTTP:
    http://it.wikipedia.org/wiki/Hyper_T...nsfer_Protocol

    2) Gestisci correttamente le eccezioni, non mettere tonnellate di try/catch sparpagliati ognuno per una "piccola" porzione di codice.

    3) Dai nomi appropriati alle variabili, seguendo le convenzioni standard.

    4) Scrivi il codice con una corretta indentazione (tipicamente 4 caratteri).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    So di non aver scritto del buon codice ...ero più interessato però a risolvere il problema...oltre alla critica sarebbe stato bello ricevere anche un qualche tipo di suggerimento. So che la Get non si fa esattamente cosi...ma il compito richiede di mandare esattamente quella stringa ....dai su datemi una mano.

    Facendo delle prove, ho notato che se chiudo il socket e poi lo riapro e passo la stringa ottenuta, i punti 5 e 6 funzionano...ma nell'esercizio è specificato che deve avvenire sulla connesione già aperta...Un sincero grazie a chiunque mi risponderà

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.