Forum by laureateci.it
[ Home | REGOLE FORUM | Tutti i blog | Profilo | Registrati | CHAT | Discussioni Attive | Discussioni Recenti | Segnalibro | Msg privati | Sondaggi Attivi | Utenti | Download Informatica | Download ICD | Download TPS | Download Magistrale | Download Specialistica | Giochi | Cerca nel web | cerca | faq | RSS ]
Nome Utente:
Password:
Salva Password
Password Dimenticata?

 Tutti i Forum
 INFORMATICA - Terzo Anno
 Reti di Calcolatori
 problema acquisizione nome host da tastiera
 Nuova Discussione  Rispondi
 Versione Stampabile Bookmark this Topic Aggiungi Segnalibro
I seguenti utenti stanno leggendo questo Forum Qui c'è:
Autore Discussione Precedente Discussione Discussione Successiva  

carter9
Nuovo Utente



Inserito il - 03/08/2009 : 13:30:25  Mostra Profilo  Visita l'Homepage di carter9 Invia a carter9 un Messaggio Privato  Rispondi Quotando
ciao a tutti...
ho fatto l'ultimo appello di luglio di reti di calcolatori...
veniva richiesto di acquisire il nome dell'host e la porta da tastiera...
ora...tranne se la cosa non è data da una mia svista...non ho trovato sulle dispense la parte dedicata all'qcquisizione da tastiera del nome dell'host...
c'è qualcuno che sa farlo a può spiegarmi come si fa?
...anche perchè non ho potuto seguire il corso e mi manca solo questo argomento...

ringrazio in anticipo chiunque possa aiutarmi...anche se siamo ad agosto e lo capisco...

buone vacanze a tutti comunque

...chi semina raccoglie...
...chi raccoglie si china...
...e lì è un attimo...

airbag
utente salvato da un

airbag

Città: manchester


Inserito il - 04/08/2009 : 13:27:50  Mostra Profilo  Visita l'Homepage di airbag  Invia a airbag un messaggio AOL Invia a airbag un Messaggio Privato  Rispondi Quotando
forse significa semplicemente immetterle da tastiera, richiederle all'utente e una volta digitate acquisirle normalmente

<>Can't you see them?
Can't you see them?
roots can't hold them
Bugs console them<>
<big><big><big><i><font color="#000033">since
yourheadisshacking
inthat
yourarmsareshacking
inthat
yourfeetareshacking
cause
theEarthisshackin'</font></i></big></big></big>
Torna all'inizio della Pagina

carter9
Nuovo Utente



Inserito il - 05/08/2009 : 10:47:18  Mostra Profilo  Visita l'Homepage di carter9 Invia a carter9 un Messaggio Privato  Rispondi Quotando
si ma poi ho problemi a capire alcune cose...
tipo quando acquisisco l'host posso inserire qualsiasi stringa?...
e poi ho problemi con l'invio dei messaggi se includo questa cosa dell'acquisizione dell'host da tastiera...
qualcuno sa se è proprio indispensabile per passare il laboratorio?

grazie comunque per la risposta

...chi semina raccoglie...
...chi raccoglie si china...
...e lì è un attimo...
Torna all'inizio della Pagina

noname
Utente medio

saladfinger


Regione: Puglia
Prov.: Bari
Città: Città dell'Ammmore


Inserito il - 05/08/2009 : 11:30:37  Mostra Profilo  Visita l'Homepage di noname Invia a noname un Messaggio Privato  Rispondi Quotando
Dipende dalle funzioni che usi per acquisire l'input da tastiera.

Se usi fgets devi eliminare il carattere di newline alla fine del buffer. Se acquisici un IP devi convertirlo nel formato opportuno, così come la porta. Le funzioni sono inet_aton e atoi.

La stringa passata ad inet_aton deve contenere un IP dotted decimal altrimenti ritorna 0. Ti posto un mio esempio (fatto su linux) in cui se inet_aton non va a buon fine, viene tentata la risoluzione del nome.


int create_TCP_socket(char *dest_addr, unsigned int port)
{
    struct sockaddr_in sa;
    int fd;

    fd = socket(AF_INET, SOCK_STREAM, 0);
    if(fd == -1)
    {
        perror("socket");
        if(fd != 1) close(fd);
          return -1;
    }

    memset(&sa, 0, sizeof(sa));
    sa.sin_family = AF_INET;
    sa.sin_port = htons(port);

    if(inet_aton(dest_addr, &sa.sin_addr) == 0)
    {
        struct hostent *he;
        he = gethostbyname(dest_addr);
        if(!he)
        {
            perror("gethostbyname");
            if(fd != 1) close(fd);
              return -1;
        }
        sa.sin_addr = *(struct in_addr*) he->h_addr_list[0];
    }

    if(connect(fd, (struct sockaddr*) &sa, sizeof(sa)) == -1)
    {
        perror("connect");
        if(fd != 1) close(fd);
          return -1;
    }
    
    return fd;
}



Per capire bene i formati e le strutture delle socket mi è stato molto utile scrivere un API portabile windows/linux. Questa è la inet_aton portabile:



int psl_inet_aton(char *addr, unsigned long *sin_addr)
{
#ifdef WINDOWS
	if((*sin_addr = inet_addr(addr)) == INADDR_NONE)
		return 0;
	else
		return 1;
#endif

#ifdef LINUX
	return inet_aton(addr, sin_addr);
#endif
}


Non so come sia la situazione lì in laboratorio. Immagino windows.

Modificato da - noname in data 05/08/2009 11:53:11
Torna all'inizio della Pagina

noname
Utente medio

saladfinger


Regione: Puglia
Prov.: Bari
Città: Città dell'Ammmore


Inserito il - 05/08/2009 : 12:05:22  Mostra Profilo  Visita l'Homepage di noname Invia a noname un Messaggio Privato  Rispondi Quotando
La posto tutta, occhio che risale al 2004 e potrebbero esserci errori di gioventù :D



Allegato: psocket.txt
19,59 KB
Torna all'inizio della Pagina

dax
Utente medio

do.not.feed


Regione: Puglia
Prov.: Bari
Città: Molfetta


Inserito il - 19/08/2009 : 17:46:32  Mostra Profilo  Visita l'Homepage di dax  Clicca per vedere l'indirizzo MSN di dax Invia a dax un Messaggio Privato  Rispondi Quotando
secondo me ti stai perdendo in un bicchier d'acqua.
scusa acquisisci l'host mnemonico come una normalissima stringa, poi ti dichiari una struct hostent* host ed in host ci riversi gethostbyname(nome) che può essere localhost.
prova un pò qualcosa tipo
char* nome="localhost"
struct hostent* host
host = gethostbyname(nome)
poi per l'indirizzo invece ti tocca qualcosa tipo
unsigned long indirizzo
indirizzo = *(u_long *) host->h_addr_list[0]
mò non ti perdere nella riga, alla fine non è complessa, tipo u_long è un modo più breve di scrivere unsigned long
infine assegni indirizzo al campo sin_addr.s_addr della struttura di indirizzamento. 'nsomma se non ho capito male hai chiesto questa roba qui ed è tipicamente da lato client, così tu dai il nome del server e lui si risolve l'indirizzo. (per completezza io ci metterei un controllo appena risolvo l'host dalla gethostbyname, tipo if (host == NULL) { chiudo la socket, libero le risorse e termino con errore }

se ti serve fare il contrario invece, tipicamente da lato server per indentificare i client che si connettono si usa il contrario, la gethostbyaddr
host = gethostbyaddr((char *)&cad.sin_addr.s.addr, 4, AF_INET), il nome dell'host che si è connesso lo trovi dietro host->h_name ed ovviamente è string (%s).
dove cad è la struttura di indirizzamento che hai dichiarato sul client

spero di aver capito quello che vuoi sapere.

ArchLinux User.
Torna all'inizio della Pagina

carter9
Nuovo Utente



Inserito il - 22/08/2009 : 17:45:28  Mostra Profilo  Visita l'Homepage di carter9 Invia a carter9 un Messaggio Privato  Rispondi Quotando
vi ringrazio per le risposte...
siete stati gentilissimi...
spero di riuscire a risolvere i miei problemi...

grazie ancora

...chi semina raccoglie...
...chi raccoglie si china...
...e lì è un attimo...
Torna all'inizio della Pagina

carter9
Nuovo Utente



Inserito il - 12/09/2009 : 18:45:02  Mostra Profilo  Visita l'Homepage di carter9 Invia a carter9 un Messaggio Privato  Rispondi Quotando
ciao ragazzi...sono andato un pochino avanti...
ora l'acquisizione la faccio...ma di dice che fallisce la connect...

c'è qualcuno che mi può dire come mai?
praticamente mi dice che il client è connesso su nome host e numero di porta che dò tramite tastiera...ma mi dice che fallisce la connect()...


...chi semina raccoglie...
...chi raccoglie si china...
...e lì è un attimo...
Torna all'inizio della Pagina
  Discussione Precedente Discussione Discussione Successiva  
 Nuova Discussione  Rispondi
 Versione Stampabile Bookmark this Topic Aggiungi Segnalibro
Vai a:
Forum by laureateci.it © 2002 - 2012 Laureateci Communications Torna all'inizio della Pagina
Il DB ha risposto in 0,19 secondi.

TargatoNA.it | SuperDeejay.Net | Antidoto.org | Brutto.it | Equiweb.it | Snitz Forum 2000