Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    348

    [C] Socket perche' non esegue determinate istruzioni??

    Ciao ragazzi

    ho implementato per motivi puramente educativi ho implementato questi due programmi client server!Per comunicare utilizzo i socket, per funzionano pero' non capisco perche' alcune istruzioni le salta!
    questo e' il codice del server le righe con # sembrerebbe che non le esegui!

    codice:
    #include <stdio.h>
    #include <sys/types.h>
    #include <sys/socket.h> 
    #include <netinet/in.h> 
    #include <netdb.h>
    #include <stdlib.h>
    
    
    #define Max 8000
    
    int main () 
    {
    
      char buff[Max];
      struct sockaddr_in server;
      struct sockaddr_in client;
      int sd, temp_sd;
      int address_size;
      unsigned short port = 9000;
    
      if((sd= socket (AF_INET ,SOCK_STREAM,0 ))<0){
        printf("Errore creazione del server!\n");
        return -1;
      }else{
    
        #printf("Prima della struttura");
      server.sin_family = AF_INET;
      server.sin_port = htons(port);
      server.sin_addr.s_addr= htons(INADDR_ANY);
      if (bind(sd, (struct sockaddr *)&server , sizeof(server))<0){
       printf("Errore nella chiamata di bind");
      }
      
    printf("sono prima del listen");
      listen(sd, 20);
      
      while(1){
        if((temp_sd= accept(sd, (struct sockaddr *)&client, &address_size))<0)
          printf("Errore nel accept");
        #printf("Sono prima del recv");
        recv(temp_sd , buff , sizeof(buff),0);
        #printf("Dati ricevuti:%s" , buff );
        strcpy(buff , "Dati dal server!");
        send(temp_sd, buff, strlen(buff), 0);
        
     close(temp_sd);
      }
    }
      
    return 0;
    }

    Invece il client riceve i dati e gli stampa a video! comunque questo e' il codice

    codice:
    #include <stdio.h>
    #include <sys/types.h>
    #include <sys/socket.h> 
    #include <netinet/in.h> 
    #include <netdb.h>
    #include <stdlib.h>
    
    
    #define Max 8000
    
    int main () 
    {
    
      char buff[Max];
      struct sockaddr_in client;
      int sd;
      struct hostent *hp;
      unsigned short port = 9000;
    
      hp = gethostbyname("127.0.0.1");
      //hp = gethostbyname("192.168.2.3");
      bzero(&client , sizeof(client));
    
    
      client.sin_family = AF_INET;
      client.sin_port = htons(port);
      client.sin_addr.s_addr= htons(INADDR_ANY);
    
      if((sd= socket (AF_INET ,SOCK_STREAM,0 ))<0){
        printf("Errore creazione del server!\n");
        return -1;
      }else
        printf("Socket creato\n");
      printf("Sono prima di connect");
      if (connect(sd, (struct sockaddr *)&client , sizeof(client))<0)
        printf("Errore nella chiamata di connessione");
    
     
     send(sd, "Dati inviati dal client", strlen("Dati inviati dal client")+1, 0);
    
     recv(sd , buff , sizeof(buff), 0);
     printf("Risposta del server:%s\n" , buff);
    
     close(sd);
    
    
    return 0;
    }
    Non capisco il perche' non esegue i printf nel server!!

    grazie mille per l'aiuto

  2. #2
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    Premi F11 con il tuo IDE e verifica che arrivi a quella riga di codice.
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    348
    ehm, uso emacs!pero' sono scemo mi sono dimenticato di gdb adesso faccio qualche tentativo!
    pero' se avete altre idee ben vengano

  4. #4
    Moderatore di Sicurezza informatica e virus L'avatar di Habanero
    Registrato dal
    Jun 2001
    Messaggi
    9,782
    e questo cosa sarebbe??

    codice:
    #printf("Sono prima del recv");
    un # prima del printf?
    Leggi il REGOLAMENTO!

    E' molto complicato, un mucchio di input e output, una quantità di informazioni, un mucchio di elementi da considerare, ho una quantità di elementi da tener presente...
    Drugo

  5. #5
    Inserisci
    codice:
    fflush(stdout);
    dopo ogni riga "incriminata".
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    348
    ok funge grazie mille!

    ma spiega il preche', si satura il flusso stdout??

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