Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    178

    [C] programmare con i socket

    Ciao ragazzi ho questo problema: ho un libro (programmare in linux tutto & oltre) ke parla di tutti gli aspetti della programmazione sotto linux, tra cui i socket...
    mi interessava fare un client-server come veniva riportato sul libro stesso ma gcc mi da un botto d'errori !!!
    questo è il sorgente del server:
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/socket.h>
    
    int main (void)
    {
      char buf[200];
      struct sockaddr_in sin;
      struct sockaddr_in pin;
      int sock_descriptor;
      int temp_sock_descriptor;
      int address_size;
    
      sock_descriptor = socket(AF_INET, SOCK_STREAM, 0);
      bzero(&sin, sizeof(sin));
      sin.sin_family = AF_INET;
      sin.sin_addr.S_un.S_un_b.s_b1=127; // indico l'indirizzo IP
      sin.sin_addr.S_un.S_un_b.s_b2=0;     //soluzione presa da un post su internet
      sin.sin_addr.S_un.S_un_b.s_b3=0;     
      sin.sin_addr.S_un.S_un_b.s_b4=1; 
      
      /*sin.sin_addr.s_addr = INADDR_ANY; "127.0.0.1";*/
    
      sin.sin_port = htons(8000);
      bind(sock_descriptor, (struct sockaddr *)&sin, sizeof(sin));
      listen(sock_descriptor, 20);
      while(1)
      {
        temp_sock_descriptor = accept(sock_descriptor, (struct sockaddr*)&pin, &address_size);
        recv(temp_sock_descriptor, buf, 16384, 0);
        send(temp_sock_descriptor, buf, sizeof(buf), 0);
        close(temp_sock_descriptor);
      }
      return 0;
    }
    il primo errore l'ho risolto e cioè ho sostituito l'indirizzo del libro "sin.sin_addr.s_addr = INADDR_ANY" xké non conosce INADDR_ANY, con la soluzione trovata su internet...poi riporta altri errori ke ora non ricordo xké sto su win...

    questo è il client:
    codice:
    #include <stdio.h>
    #include <sys/socket.h>
    
    int main (void)
    {
      char buf[200];
      struct sockaddr_in pin;
      int socket_descriptor;
      struct hostent *server_host_name;
     
      server_host_name = gethostbyname("127.0.0.1");
      bzero(&pin, sizeof(pin));
      pin.sin_family = AF_INET;
      pin.sin_addr.S_un.S_un_b.s_b1=127; // indico l'indirizzo IP
      pin.sin_addr.S_un.S_un_b.s_b2=0;     //sempre soluzione trovata
      pin.sin_addr.S_un.S_un_b.s_b3=0;
      pin.sin_addr.S_un.S_un_b.s_b4=1; 
      //pin.sin_addr.s_addr = htonl(INADDR_ANY);
    
      pin.sin_addr.s_addr = ((struct in_addr *)(server_host_name->h_addr))->s_addr;   (*)
      pin.sin_port = htons(8000);
      socket_descriptor = socket(AF_INET, SOCK_STREAM, 0);
      connect(socket_descriptor, (void *)&pin, sizeof(pin));
      send(socket_descriptor, "test data", strlen("test data")+1, 0);
      recv(socket_descriptor, buf, 8192, 0);
      close(sock_descriptor);
      return 0;
    }
    stessa questione:in "//pin.sin_addr.s_addr = htonl(INADDR_ANY);"
    non conosce INADDR e io l'ho sostituito con la soluzione trovata(ke non da problemi), ma poi si incacchia qui (*)....ora come ho già scritto non so quali sono gli errori precisi ke gcc rileva, però ne prova più al client ke al server...

    se qualke anima pia dà nokkiata a sti codici me fa un favore!!!io sto a uscicci matto xké quel libro la fa troppo semplice quando invece non funziona
    ho provato a spulciare i vari header ma mi so solo confuso....
    il mio obiettivo era creare 2 applicazioni (server e client) da far girare contemporaneamente sullo stesso pc e poi dal client mandare rikieste al server...tutto qua!

    Thx to all!!!

  2. #2
    Utente di HTML.it L'avatar di /dev/null
    Registrato dal
    May 2004
    Messaggi
    1,936
    Per tutto cio' che riguarda la programmazione sotto Linux:
    http://www.lilik.it/~mirko/gapil/gapil.html
    http://www.lulli.net/WEB/hack/xximpa...rig-index.html


    Prova a dare un'occhiatina a quelle due guide (entrambe trattano i socket molto bene), se ancora non risolvi uppa questo thread che cercheremo di scovare qualche errore

    Ultima modifica ad opera dell'utente /dev/null il 01-01-0001 alle 00:00

  3. #3
    Utente di HTML.it L'avatar di Fox82
    Registrato dal
    Feb 2002
    Messaggi
    459
    Dai un'occhiata a Gapil, è una guida in italiano dove è spiegata molto bene la programmazione did sistema in Linux.

    La seconda parte è specifica sulle socket
    Linux user number 403381

    Stop TCPA!

  4. #4
    Utente di HTML.it L'avatar di Fox82
    Registrato dal
    Feb 2002
    Messaggi
    459
    Ops...

    Scusa ma non avevo visto la risposta!
    Linux user number 403381

    Stop TCPA!

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.