|
|
|
![]() |
|
Strumenti |
![]() |
#41 | |
Senior Member
Iscritto dal: Jan 2006
Messaggi: 2722
|
Quote:
Che tipo di errore ti dà? Stai includendo <winsock2.h> ?
__________________
- Spesso gli errori sono solo i passi intermedi che portano al fallimento totale. - A volte penso che la prova piu' sicura che esiste da qualche parte una forma di vita intelligente e' il fatto che non ha mai tentato di mettersi in contatto con noi. -- Bill Watterson |
|
![]() |
![]() |
![]() |
#42 | |||
Senior Member
Iscritto dal: Jul 2005
Città: San Marino
Messaggi: 308
|
Quote:
![]() Questi sono gli errori (in Build Log): Quote:
Quote:
![]()
__________________
![]() ![]() Ultima modifica di 17Qwerty71 : 25-02-2006 alle 14:07. |
|||
![]() |
![]() |
![]() |
#43 | |
Senior Member
Iscritto dal: Jan 2006
Messaggi: 2722
|
Quote:
![]() Il tipo sockaddr_in è una struttura (struct) non definita con la typedef nell'header winsoock2 (winsock2.h). Quindi, ogni volta che definisci una nuova variabile di tipo sockaddr_in, devi fare: Codice:
... int main(void) { ... struct sockaddr_in sockIn; ... sockIn.sin_family = AF_INET; ... /* eccetera... */ } ![]()
__________________
- Spesso gli errori sono solo i passi intermedi che portano al fallimento totale. - A volte penso che la prova piu' sicura che esiste da qualche parte una forma di vita intelligente e' il fatto che non ha mai tentato di mettersi in contatto con noi. -- Bill Watterson Ultima modifica di -fidel- : 25-02-2006 alle 15:07. |
|
![]() |
![]() |
![]() |
#44 | |
Senior Member
Iscritto dal: Jul 2005
Città: San Marino
Messaggi: 308
|
Quote:
![]() Ma come mai non hanno definito la struttura come tipo di variabile (di solito la microsoft le definisce da quello che ho visto)? ![]() Un'altra domanda: ma l'header windows.h include a sua volta gli header per le winsock (perchè mi funziona anche senza winsock2.h)?
__________________
![]() ![]() Ultima modifica di 17Qwerty71 : 25-02-2006 alle 14:27. |
|
![]() |
![]() |
![]() |
#45 | ||
Senior Member
Iscritto dal: Jan 2006
Messaggi: 2722
|
Quote:
Quote:
Al peggio, puoi sempre spulciare il codice di windows.h. EDIT: in realtà in ambiente unix/linux, i socket sono un po' più simpatici per il programmatore: essi sono infatti un astrazione del filesystem, quindi un socket viene visto dal programmatore come un file su harddisk. Questo permette di usare un soclet come un file (ad esempio si scrivono dati sul socket con una write(), si leggono dati con una read(), ecc.) In widows ninvece esistono funzioni apposite (send() per scrivere, recv() per leggere, questo per i socket datagram ovviamente). EDIT 2: se ti rompe definire le variabili sockaddr_in anteponendo come doveroso la keyword struct, puoi fare (all'inizio del codice o in un header ancora meglio): Codice:
typedef struct sockaddr_in SOCKADDR_IN; typedef struct sockaddr SOCKADDR; Codice:
SOCKADDR_IN sockIn; SOCKADDR sock;
__________________
- Spesso gli errori sono solo i passi intermedi che portano al fallimento totale. - A volte penso che la prova piu' sicura che esiste da qualche parte una forma di vita intelligente e' il fatto che non ha mai tentato di mettersi in contatto con noi. -- Bill Watterson Ultima modifica di -fidel- : 25-02-2006 alle 16:19. |
||
![]() |
![]() |
![]() |
#46 |
Senior Member
Iscritto dal: Nov 2002
Messaggi: 4329
|
fidel sei un capo!!! non ho tempo di replyare degnamente al momento (notte bianca a torino!) ma quando torno ti ringrazio a dovere!
__________________
|18k+|slk800|a7n8x|1Gb/ddr400|Gf4mx440|Pio108|WD 160Gb|Case|Uni|Album|AnimeClick|OneManga| |ClassicThrash!|BNR Metal|TrueMetal|Dime|Chuck| |
![]() |
![]() |
![]() |
#47 | |
Senior Member
Iscritto dal: Jan 2006
Messaggi: 2722
|
Quote:
![]() ![]() ![]() Tornando in topic, se hai ancora problemi fammi sapere, ormai siamo vicini alla soluzione mi sembra ![]()
__________________
- Spesso gli errori sono solo i passi intermedi che portano al fallimento totale. - A volte penso che la prova piu' sicura che esiste da qualche parte una forma di vita intelligente e' il fatto che non ha mai tentato di mettersi in contatto con noi. -- Bill Watterson |
|
![]() |
![]() |
![]() |
#48 |
Senior Member
Iscritto dal: Nov 2002
Messaggi: 4329
|
si siamo molto vicini, anche se ho pochissimo tempo da dedicarci in ti giorni che ho parenti che vengono da napoli (devo fare da cicerone e far visitare torino)...cmq con java mi son trovato un attimo meglio (ma con java son piu ferrato)...i tuoi esempi sono una miniera ad ogni modo, me li studio alla perfezione e poi ti dico, ma non dovrei avere piu problemi a sto punto...penso che mi cimentero nella realizzazione di un client per trasferire file fra i miei amici (non credo sia molto laborioso, voglio solo che vada piu veloce di msn, che a me va a 1 k se è tanto), cosi, per esercizio...
__________________
|18k+|slk800|a7n8x|1Gb/ddr400|Gf4mx440|Pio108|WD 160Gb|Case|Uni|Album|AnimeClick|OneManga| |ClassicThrash!|BNR Metal|TrueMetal|Dime|Chuck| |
![]() |
![]() |
![]() |
#49 | |
Senior Member
Iscritto dal: Jan 2006
Messaggi: 2722
|
Quote:
![]() Non credo avrai problemi per fare un programma per trasferire file, il concetto è sempre lo stesso, basta leggere il file da mandare in "chunks" di dimensione stabilita, e fare una send() su ogni chunk in un ciclo while (finchè viene letto tutto il file). Stessa cosa per il server (legge dal socket finche' lo stesso non ritorna 0 bytes letti). Un consiglio (scontato): quando hai dubbi di sorta o quando vuoi approfondire l'uso di una funzione (valori di ritorno, comportamento ecc.) consulta la MSDN, è un'ottima e completa fonte di informazioni. Se avrai dei dubbi nella realizzazione del tuo programma in futuro, basta chiedere, quando ho tempo rispondo volentieri (quando so rispondere eheh) ![]() Ciao e buon giro!
__________________
- Spesso gli errori sono solo i passi intermedi che portano al fallimento totale. - A volte penso che la prova piu' sicura che esiste da qualche parte una forma di vita intelligente e' il fatto che non ha mai tentato di mettersi in contatto con noi. -- Bill Watterson |
|
![]() |
![]() |
![]() |
#50 |
Senior Member
Iscritto dal: Jul 2005
Città: San Marino
Messaggi: 308
|
E' possibile passare in sin_addr l'identificativo del pc della rete locale invece dell'ip?
![]()
__________________
![]() ![]() |
![]() |
![]() |
![]() |
#51 | |
Senior Member
Iscritto dal: Jun 2002
Città:
Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8878
|
Quote:
~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso |
|
![]() |
![]() |
![]() |
#52 | |
Senior Member
Iscritto dal: Jan 2006
Messaggi: 2722
|
Quote:
Se vuoi ottenere l'indirizzo ip del server su cui connettersi tramite il suo nome DNS si usa la funzione struct hostent* FAR gethostbyname( const char* name ); Per comodità metto anche la struttura hostent: typedef struct hostent { char FAR* h_name; char FAR FAR** h_aliases; short h_addrtype; short h_length; char FAR FAR** h_addr_list; } hostent; (tutti quei FAR sono definiti in Win, fai conto che non ci sono). In più in winsock2.h è definita, per retrocompatibilità: #define h_addr_list[0] h_addr Ad esempio puoi fare: Codice:
struct sockaddr_in clientSin; struct hostent *server; char serverName[20]; ... // Non alloco memoria per '*server', dal momento che la struttura // viene allocata dalla funzione... strncpy(serverName, "www.google.it", 20); server = gethostbyname(serverName); ... // Se tutto è andato bene, ora in '*server' ho, tra le altre cose, la // lista di indirizzi IP associati al nome host www.google.it. // Ad esempio, per prendere il primo: clientSin.sin_addr = *((struct in_addr *)server->h_addr_list[0]); // Potevo anche fare: // clientSin.sin_addr = *((struct in_addr *)server->h_addr); int getaddrinfo( const char* nodename, const char* servname, const struct addrinfo* hints, struct addrinfo** res ); Per il suo uso ti rimando alla MSDN (o alla manpage di Linux indifferentemente). Se invece vuoi risolvere gli ip tramite il nome NetBios del PC (il nome di Windows per intenderci) ovviamente lo puoi fare solo in rete locale, quando non hai un server DNS in LAN oppure la tua lan non è collegata al DNS mondiale (sennò usi gethostbyname tranquillamente). Per quello non ricordo cosa si usa, poso controllare (sarà qualche funzione esclusiva di winsock2). EDIT: penso puoi provare questa funzione per sapere l'ip tramite il nome NetBios: NET_API_STATUS NetWkstaTransportEnum( LPWSTR servername, DWORD level, LPBYTE* bufptr, DWORD prefmaxlen, LPDWORD entriesread, LPDWORD totalentries, LPDWORD resumehandle ); definita in <Lm.h> Consulta al solito MSDN per il suo uso (cmq alla fine in *bufptr hai tutte le info che ti servono, incluso l'ip). EDIT 2: Però mi sta venendo un'idea: prova a passare a gethostbyname il nome Netbios del pc a cui collegarti invece del nome DNS, magari funziona lo stesso! Ovviamente devi anteporre "\\" al nome (ad esempio se il pc si chiama MioPc, devi fare gethostbyname("\\MioPc"). E' possibile che la gethostbyname con macchine Windows si comporti in modo "esteso", magari hai una bella sorpresa! Quando posso provo anch'io.
__________________
- Spesso gli errori sono solo i passi intermedi che portano al fallimento totale. - A volte penso che la prova piu' sicura che esiste da qualche parte una forma di vita intelligente e' il fatto che non ha mai tentato di mettersi in contatto con noi. -- Bill Watterson Ultima modifica di -fidel- : 02-03-2006 alle 20:17. |
|
![]() |
![]() |
![]() |
#53 |
Senior Member
Iscritto dal: Jan 2006
Messaggi: 2722
|
Ho provato ciò che ho detto nell'EDIT 2 del post precedente.
Funziona alla grande con gethostbyname() ![]() Però preciso una cosa non corretta che ho detto prima: il nome del Pc NON deve essere prefisso con "\\". Ti basta quindi fare: Codice:
struct hostent *server; ... server = gethostbyname("MioPc"); // Oppure gli passi il nome con un buffer come ho fatto nell'esempio // precedente, di solito si usa il buffer dal momento che non sai praticamente // mai a priori il server a cui vuoi connetterti ;) Buon divertimento ![]()
__________________
- Spesso gli errori sono solo i passi intermedi che portano al fallimento totale. - A volte penso che la prova piu' sicura che esiste da qualche parte una forma di vita intelligente e' il fatto che non ha mai tentato di mettersi in contatto con noi. -- Bill Watterson Ultima modifica di -fidel- : 02-03-2006 alle 20:14. |
![]() |
![]() |
![]() |
#54 |
Senior Member
Iscritto dal: Jul 2005
Città: San Marino
Messaggi: 308
|
Grazie mille
![]()
__________________
![]() ![]() |
![]() |
![]() |
![]() |
#55 | |
Senior Member
Iscritto dal: Jun 2002
Città:
Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8878
|
Quote:
![]() ~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso |
|
![]() |
![]() |
![]() |
#56 | |
Senior Member
Iscritto dal: Jan 2006
Messaggi: 2722
|
Quote:
![]()
__________________
- Spesso gli errori sono solo i passi intermedi che portano al fallimento totale. - A volte penso che la prova piu' sicura che esiste da qualche parte una forma di vita intelligente e' il fatto che non ha mai tentato di mettersi in contatto con noi. -- Bill Watterson |
|
![]() |
![]() |
![]() |
#57 | |
Senior Member
Iscritto dal: Jun 2002
Città:
Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8878
|
Quote:
![]() ~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:54.