Pages: [1]   Go Down
Print
Author Topic: Problema altro Esercizio..  (Read 2422 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
Grillo
Apprendista Forumista
**
Offline Offline

Posts: 219


« on: 30-04-2011, 14:27:30 »

Scrivere in C o Java un programma che:

-apra una connessione verso l'IP 192.168.0.33, port 80
-invii la stringa "GET /gp/prova/04.aux\n"
-dallo stream di byte ricevuti memorizzi quelli dal 397.568 al 397.613
-scriva questi byte sulla standard output

I primi due punti tutto ok.
Gli ultimi due punti non capisco, come si fa a memorizzare un qualcosa compreso tra byte, i byte come vengono lavorati.
Qualcuno ha implementato questa soluzione? Potete postare la vostra?
Logged
cock86
Forumista Eroico
*****
Offline Offline

Posts: 2.014


OM


« Reply #1 on: 30-04-2011, 14:44:34 »

per il terzo sta alla logica che vuoi usare. Un esempio te l'ho dato nell'altro post, poi ognuno usa una propria logica per prendere una substringa. In ogni caso sono problemi di programmazione classica (2 nel nostro CdL) quindi niente di particolare.
Per quanto riguardo il quarto il prof fa riferimento spesso al C dove lo standard output (stdout) serve (se non erro) a scrivere (banalmente aggiungerei) su console.
Tutto qua!
Logged

Un "buon informatico" trova una soluzione ad ogni tipo di problema. Un "ottimo informatico" trova la soluzione più efficiente ad ogni tipo di problema! Non stancatevi di migliorare la vostra soluzione!
Grillo
Apprendista Forumista
**
Offline Offline

Posts: 219


« Reply #2 on: 01-05-2011, 00:11:13 »

Quindi nel caso dell'esercizio precedente delle parentesi quadre, bisogna scrivere su console il contenuto dentro le parentesi quadre giusto? La stringa s quindi.

Per questo invece tu hai detto nell'altro post che lo faresti con le righe, ma secondo me le righe non c'entrano niente, 397.568 secondo me non è la riga, secondo me non vuole sapere il contenuto tra la riga 397.568 e  e la riga 397.613
Questi numeri sono byte, quindi la soluzione implementata sarà diversa o no?

Ma può essere che nessuno si trova delle soluzioni di questi appelli? Eppure sono vecchi come appelli.
Logged
cock86
Forumista Eroico
*****
Offline Offline

Posts: 2.014


OM


« Reply #3 on: 01-05-2011, 09:41:41 »

Quote
Per questo invece tu hai detto nell'altro post che lo faresti con le righe, ma secondo me le righe non c'entrano niente, 397.568 secondo me non è la riga, secondo me non vuole sapere il contenuto tra la riga 397.568 e  e la riga 397.613
A parte che io intendevo di sommare le lunghezze delle righe e questo ti permette di avere il numero di caratteri e prendere i caratteri e non le righe comprese tra quei due numeri. Comunque semmai dovessero essere i byte, un char è un byte quindi non vedo cosa cambi.
Quote
Quindi nel caso dell'esercizio precedente delle parentesi quadre, bisogna scrivere su console il contenuto dentro le parentesi quadre giusto? La stringa s quindi.
no! perchè quello tra le parentesi quadre devi mandarlo al server. La risposta che ne riceverai la scriverai su console.

Logged

Un "buon informatico" trova una soluzione ad ogni tipo di problema. Un "ottimo informatico" trova la soluzione più efficiente ad ogni tipo di problema! Non stancatevi di migliorare la vostra soluzione!
Grillo
Apprendista Forumista
**
Offline Offline

Posts: 219


« Reply #4 on: 01-05-2011, 11:12:36 »

E a livello pratico se questo è il contenuto del mio file:
Code:
sistemi distribuiti
esame di laboratorio
professore [pappalardo] giuseppe
ultima riga dopo le parentesi
Il server che risposta mi dovrebbe mandare, in base all'esercizio delle parentesi quadre.
La mia stringa s che mando è pappalardo, e il server con cosa mi risponde.
Logged
cock86
Forumista Eroico
*****
Offline Offline

Posts: 2.014


OM


« Reply #5 on: 01-05-2011, 19:21:32 »

questo contenuto del file l'hai creato tu?
Logged

Un "buon informatico" trova una soluzione ad ogni tipo di problema. Un "ottimo informatico" trova la soluzione più efficiente ad ogni tipo di problema! Non stancatevi di migliorare la vostra soluzione!
Grillo
Apprendista Forumista
**
Offline Offline

Posts: 219


« Reply #6 on: 01-05-2011, 23:56:49 »

Si per vedere se il programma mi prendeva il contenuto tra le parentesi quadre, la stringa s con il contenuto delle parentesi quadre la mando al server ma in base al mio file non so cosa mi dovrebbe rispondere il server.
Logged
cock86
Forumista Eroico
*****
Offline Offline

Posts: 2.014


OM


« Reply #7 on: 02-05-2011, 00:07:20 »

ma mandare quello stringa al server non ha senso. Cioè non è una richiesta particolare,quindi cosa dovrebbe restituirti il server??? se tu nelle parentesi mettessi per esempio una GET allora potrebbe avere senso la richiesta. E una risposta potresti ottenerla dal server. Prova a mettere nella stessa cartella della tua pagina di prova un'altra pagina (chiamala come vuoi, per esempio link.html) e poi nelle parentesi quadre metti [GET /link.html] (aggiungeremo \n). Dovresti avere come risposta del server (nel buffer che poi leggerai come hai fatto alla prima GET - con il while per intenderci) ciò che hai messo nella pagina link.html. Spero di essere stato chiaro.

ps ti accorgerai che proprio così non è. Quindo prima ti inviare la richiesta al server dovrai chiudere la connessione (a localhost nel tuo caso) e riaprirla. Non so perché ma pare che java dia problemi (almeno nella stream socket... bho!).

ps2 mi togli una curiosità??? ma il codice che avevi postato l'avevi scritto tu?
Logged

Un "buon informatico" trova una soluzione ad ogni tipo di problema. Un "ottimo informatico" trova la soluzione più efficiente ad ogni tipo di problema! Non stancatevi di migliorare la vostra soluzione!
Grillo
Apprendista Forumista
**
Offline Offline

Posts: 219


« Reply #8 on: 02-05-2011, 00:18:23 »

Ne avevo scritto un po io, ma poi ho fatto una fusione con un codice che ho trovato sul forum, e un po con gli esempi del prof, l'ho sistemato un po ed è venuto fuori questo:
Code:
import java.net.*;
import java.io.*;

public class codClient {

public static void main(String[] args) throws IOException {
 
    Socket socket=null;
    BufferedReader in=null, stdIn=null;
    PrintWriter out=null;
 
   
        // creazione socket
socket = new Socket("127.0.0.1", 80);
        System.out.println("Client: started");
        System.out.println("Client Socket: "+ socket);

        // creazione stream di input da socket
        InputStreamReader isr = new InputStreamReader( socket.getInputStream() );
        in = new BufferedReader(isr);

        // creazione stream di output su socket
        OutputStreamWriter osw = new OutputStreamWriter( socket.getOutputStream() );
        BufferedWriter bw = new BufferedWriter(osw);
        out = new PrintWriter(bw, true);

out.println("GET /file.txt\n");
   
String s="";
char r;
boolean copia=false;
String linea="";
   
while(true )
                {
                    linea=in.readLine();
                    if(linea==null) break;
                    //System.out.println(linea);
                    for(int i=0; i<linea.length(); i++)
                    {
                        r=linea.charAt(i);
                        //System.out.println(""+r);
    if(r=='[')
copia=true;
                            if(copia)
                            s+=r;
    if(r==']')
break;
                           
                    }
                    if(copia) break;
                }

System.out.println("Stringa da inviare al server:  "+s);
out.println(s+"\n");

String output="";
while((s=in.readLine())!=null) {
output+=s;
}
System.out.println("Risposta server: "+output);


    System.out.println("EchoClient: closing...");
    out.close();
    in.close();
    socket.close();
  }
}

Senti presentassi questo all'esame secondo te è giusto come codice? Tu cosa aggiungeresti per farlo diventare accettabile all'esame, manca qualcosa?
Logged
Grillo
Apprendista Forumista
**
Offline Offline

Posts: 219


« Reply #9 on: 02-05-2011, 00:25:39 »

Ma tu devi dare distribuiti pure mercoledì? Ma se martedì ti trovi in aula studio che ne dici di studiare qualche oretta assieme.
Logged
cock86
Forumista Eroico
*****
Offline Offline

Posts: 2.014


OM


« Reply #10 on: 02-05-2011, 00:30:09 »

a dire il vero l'avrei già data. Comunque se Martedì dovessi essere disponibile magari potrei fartelo sapere.
Tornando a noi, ti funziona? posti un output? e cosa hai nei due file? pare corretto (a meno del ps che ti dicevo prima) vorrei provarlo, ma mi mancano i due file quindi non avrebbe senso.
Logged

Un "buon informatico" trova una soluzione ad ogni tipo di problema. Un "ottimo informatico" trova la soluzione più efficiente ad ogni tipo di problema! Non stancatevi di migliorare la vostra soluzione!
Grillo
Apprendista Forumista
**
Offline Offline

Posts: 219


« Reply #11 on: 02-05-2011, 00:37:40 »

A dire il vero non so cosa mettere nei due file, non so il prof cosa mette.
Io in uno ho messo:
Code:
sistemi distribuiti
esame di laboratorio
professore[GET /distribuiti.html\n] giuseppe
ultima riga dopo le parentesi

nell'altro distribuiti.html niente di particolare, solo delle righe di testo senza alcuna formattazione.
Questo è l'output
Code:
Client: started
Client Socket: Socket[addr=/127.0.0.1,port=80,localport=44155]
Stringa da inviare al server:  ["GET /distribuiti.html\n"]
Risposta server: ultima riga dopo le parentesi
EchoClient: closing...
>Exit code: 0
Logged
cock86
Forumista Eroico
*****
Offline Offline

Posts: 2.014


OM


« Reply #12 on: 02-05-2011, 00:49:42 »

mmm qualcosa non va! così com'è dovrebbe darti
Code:
risposta server:

vediamo... togli
Code:
if(copia) break;
perché pare che esce subito dopo la parentesi quindi il buffer non si svuota. Poi inverti
Code:

if(r=='[')
copia=true;
con           
Code:
 
if(r==']')
break;
così eliminiamo a priori le parentesi quando inviamo la richiesta al server.
E poi, per il momento dovremmo esserci. Dovrebbe darti
Quote
risposta server:
Ma noi vorremmo
Quote
risposta server:tuo_testo
. Poi vediamo come fare.
Logged

Un "buon informatico" trova una soluzione ad ogni tipo di problema. Un "ottimo informatico" trova la soluzione più efficiente ad ogni tipo di problema! Non stancatevi di migliorare la vostra soluzione!
Grillo
Apprendista Forumista
**
Offline Offline

Posts: 219


« Reply #13 on: 02-05-2011, 10:34:38 »

Si ma come dici tu mi viene quest'output
Code:
Client: started
Client Socket: Socket[addr=/127.0.0.1,port=80,localport=35001]
Stringa da inviare al server:  [GET /distribuiti.html\nultima riga dopo le parentesi
Risposta server:
EchoClient: closing...
>Exit code: 0
Quindi non mi stampa la parentesi che chiude ed invia al server non più solo quello che c'è all'interno della parentesi ma tutto fino alla fine del testo. E poi risposta server nulla.
Boo cmq passo per ora all'altra tipologia di esercizi, le RMI e la funzione hash() altrimenti non c'arrivo. Se ti trovi qualche esercizio di questa tipologia puoi mandarmelo così vedo come funziona e cosa si deve fare?
Logged
cock86
Forumista Eroico
*****
Offline Offline

Posts: 2.014


OM


« Reply #14 on: 02-05-2011, 11:18:08 »

aggiungi al corpo dell'if con parentesi quadra chiuse copia=false così ti fa smettere di copiare.
Così la prima parte funziona. Sulla seconda parte c'è un altro topic che parla proprio di quest'esercizio. Leggilo.
Logged

Un "buon informatico" trova una soluzione ad ogni tipo di problema. Un "ottimo informatico" trova la soluzione più efficiente ad ogni tipo di problema! Non stancatevi di migliorare la vostra soluzione!
Pages: [1]   Go Up
Print
Jump to: