Pages: [1]   Go Down
Print
Author Topic: [RISOLTO]ESERCIZIO della prova n° 29  (Read 952 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
Chuck_son
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 1.583



WWW
« on: 07-12-2012, 12:07:59 »

avendo un server che tramite una write invia sequenzialmente le locazioni di un array di stringhe,
come faccio nel client a stamparle?
« Last Edit: 07-12-2012, 16:22:57 by Chuck_son » Logged

Aliens Exist
Chuck_son
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 1.583



WWW
« Reply #1 on: 07-12-2012, 16:22:45 »

risolto utilizzando datagram socket, dato che con le stream si bloccava nella read
Logged

Aliens Exist
Shin
Forumista
***
Offline Offline

Gender: Male
Posts: 822

Io sono ciò che sono per ciò che siamo tutti


WWW
« Reply #2 on: 10-12-2012, 18:36:58 »

potresti postare il codice?
Logged

"Il peggiore analfabeta è l’analfabeta politico. Egli non sente, non parla, nè s’importa degli avvenimenti politici. Egli non sa che il costo della vita, il prezzo dei fagioli, del pesce, della farina, dell’affitto, delle scarpe e delle medicine dipendono dalle decisioni politiche.

L’analfabeta politico è così somaro che si vanta e si gonfia il petto dicendo che odia la politica.

Non sa, l’imbecille, che dalla sua ignoranza politica nasce la prostituta, il bambino abbandonato, l’assaltante, il peggiore di tutti i banditi,
che è il politico imbroglione, il mafioso corrotto, il lacchè delle imprese nazionali e multinazionali."

(Bertolt Brecht)

Collettivo SDAI: collettivosdai.altervista.org, facebook.
Movimento Studentesco Catanese: www.movimentostudentesco.org

https://github.com/ShinDarth
http://shinworld.altervista.org
http://www.openprogrammers.it

LinuxMint user.
Chuck_son
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 1.583



WWW
« Reply #3 on: 10-12-2012, 21:50:34 »

client

Code:



#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#include <string.h>

#define HOST "127.0.0.1"

void main(void) {

    int sock;
    struct sockaddr_in addr;
    int retcode;
    int buff_length=512;
    char buff[buff_length];
   
    if((sock=socket(AF_INET,SOCK_DGRAM,0))==-1){
        perror("Error creatinon soket \n");
    }
   
    addr.sin_family=AF_INET;
    addr.sin_port=80;
    inet_aton(HOST,&addr.sin_addr);
   
    if((retcode=connect(sock,(struct sockaddr*)&addr,sizeof(addr)))==-1){
        perror("Error connect \n");
        exit(-1);
    }
   
    printf("Socket connected to server %s\n",HOST);
   
    char str[50];
    scanf("%s",str);
    if((retcode=sendto(sock,str,strlen(str),0,(struct sockaddr*)&addr,sizeof(addr)))==-1){
        perror("Error write\n");
        exit(-1);
    }
   
    int size=sizeof(addr);
    while((retcode=recvfrom(sock,&buff,buff_length,0,(struct sockaddr*)&addr,&size))!=0){
       
     printf("LIST :%s   RETCODE=%d\n",buff,retcode);
     
    } 
    if(retcode==-1){
    perror("Error Read\n");
    exit(-1);
   
    }
    close(0);
    exit(-1);
}







SERVER

Code:
/*
 Server

Implementare in Java o C un server che comunica tramite socket.
Il server attende sul port 33333 e memorizza in ordine tutte le stringhe che riceve (di fatto nell'implementazione ci si può limitare a memorizzare solo le ultime 100, se lo si desidera).

In risposta ad ogni nuova stringa proveniente da un client gli risponde con tutte le stringhe ricevute fino a quel momento (compresa l'ultima), con queste eccezioni:

a partire dalla quinta stringa memorizzata, il server risponderà: LIMITE RAGGIUNTO;
in risposta alla stringa RESET, il server azzera l'elenco delle stringhe memorizzate fino ad allora e risponde OK.
Per collaudare il server implementato, si può comunicare con esso (sotto linux) con il comando:
telnet localhost 33333

Client (facoltativo)

Si implementi in C o Java un cliente che riceve da standard input una stringa, la invia al server su localhost, port 33333 e infine attende da esso come risposta una stringa che visualizzerà sulla standard output.
Durata della prova: 50 minuti
 */

#include <stdlib.h>
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>

#define PORT 80
#define HOST "127.0.0.1"
#define MAX_BUFFER 100

void main (void){

    int sock;
    int retcode;
    struct sockaddr_in addr,client;
    char list[MAX_BUFFER][MAX_BUFFER];
    int index=0;

   
    printf("Creating server socket\n");
   
    if((sock=socket(AF_INET,SOCK_DGRAM,0))==-1){
        perror("Error socket\n");
        exit(-1);
    }
   
    addr.sin_family=AF_INET;
    addr.sin_port=PORT;
    inet_aton(HOST,&addr.sin_addr);
   
    if((retcode=bind(sock,(struct sockaddr*)&addr,sizeof(addr)))==-1){
        perror("Error binding\n");
        exit(-1);
    }
   
    int size_addr=sizeof(client);
    while(1){
               
        printf("Socket connected\n");
        int size=sizeof(addr);
        if((retcode=recvfrom(sock,list[index],MAX_BUFFER,0,(struct sockaddr*)&addr,&size))==-1){
            perror("Error read\n");
            exit(-1);
        }
        if(strcmp(list[index],"reset")==0){
            index=0;
           
        }
        else{
            int i=0;
            index++;

            while(i<index){
                printf("%s\n",list[i]);
                i++;
            }
            i=0;
            while(i<index){
                if((retcode=sendto(sock,list[i],sizeof(list[i]),0,(struct sockaddr*)&addr,sizeof(addr)))==-1){
                    perror("Error Write\n");
                    exit(-1);
                }
                printf("bite writed %d\n",retcode);
                i++;
            }
        }
    }
}

Logged

Aliens Exist
Chuck_son
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 1.583



WWW
« Reply #4 on: 10-12-2012, 21:55:03 »

l'unico problema sta nel client, che una volta che legge i dati ricevuti dal server, attende ancora altre write da parte del server, nonostante abbia provato a mettere un :  while((retcode=read(..,..,))>0);
quindi stoppo il client con ctrl+z;

inoltre non ho implementato la funzionalità del max 5 , dato che non ho capito cosa intendesse la consegna xD
Logged

Aliens Exist
Pages: [1]   Go Up
Print
Jump to: