|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jul 2005
Città: San Marino
Messaggi: 308
|
[C/C++] Guida socket
Avrei in progetto un programma che comunica tramite un'altro attraverso le socket, avete dei buoni tutorial (o guide) da propormi?
Premetto che sulle socket non conosco ancora nulla ![]()
__________________
![]() ![]() |
![]() |
![]() |
![]() |
#2 |
Member
Iscritto dal: Sep 2005
Città: Barcelona
Messaggi: 200
|
ma lavori su unix o win?
__________________
Code without tests is broken by design. |
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Jul 2005
Città: San Marino
Messaggi: 308
|
Quote:
![]()
__________________
![]() ![]() |
|
![]() |
![]() |
![]() |
#4 |
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
|
allora per windows esiste msdn
![]() Non esiste nulla di + completo rispetto a msdn ~§~ 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 |
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: Jan 2006
Messaggi: 2722
|
Quote:
![]() 17Qwerty71, a teoria dei socket come stai messo?
__________________
- 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 |
|
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Jan 2006
Messaggi: 2722
|
Mi quoto da solo...
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 |
|
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Jul 2005
Città: San Marino
Messaggi: 308
|
Quote:
![]() Il programmino in questione comunica con un'altro tramite la rete lan, non so' se può tornare utile come informazione ![]()
__________________
![]() ![]() |
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Jan 2006
Messaggi: 2722
|
Uff sono di nuovo scomparsi i messaggi scritti in mattinata!!
![]() Ti avevo messo due link, ora li devo cercare di nuovo... ![]()
__________________
- 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 |
![]() |
![]() |
![]() |
#9 | |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7027
|
Quote:
EDIT: io una volta ho realizzato un programma per chattare su reti LAN che usava le mailslot; se vuoi ti passo i sorgenti (è fatto in Visual C++ 6 con MFC). comunque ricordo che su alcune reti il programma aveva un problema che ritengo fosse dovuto a qualche malfunzionamento delle mailslots contro i quali ti devo avvisare: a volte (non so quando e non so perché) le mailslot riceventi ricevono gli stessi messaggi due o tre volte, sono abbastanza sicuro che non dipendesse dal mio programma (ho controllato molto approfonditamente con l'aiuto del debugger); mi era venuto in mente di risolvere la questione usando dei transaction IDs nei miei messaggi (il programma ricevente doveva ignorare messaggi con TrID uguale a quello di un messaggio precedente), ma alla fine non l'ho più fatto per pigrizia ![]() attualmente il mio programma funziona alla perfezione tranne che su alcune reti i messaggi di chat arrivano 2 o raramente 3 volte ![]() Ultima modifica di 71104 : 19-02-2006 alle 19:54. |
|
![]() |
![]() |
![]() |
#10 | ||
Senior Member
Iscritto dal: Jul 2005
Città: San Marino
Messaggi: 308
|
Quote:
![]() Quote:
![]()
__________________
![]() ![]() |
||
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Jan 2006
Messaggi: 2722
|
Ho ritrovato i link nella cronologia per fortuna...
A questo indirizzo puoi trovare una breve ma efficace guida sulla programmazione con winsock (si riferisce alla 1.1 ma per cominciare va benissimo, nulla di diverso dalla 2.0), presenta degli esempi di codice carini e commentati, ed è in italiano. La guida non si sofferma su problematiche pù avanzate come socket bloccanti/non bloccanti, broadcast/multicast ecc., ma appunto va bene per cominciare e fare subito qualche programma interessante. La guida è in italiano. A quest'altro indirizzo trovi invece una guida un po' più approfondita della precedente, ma in inglese. Ah, ho letto velocemente la prima metà e ti consiglio di saltare la parte sulla configurazione del compilatore, è inutile se usi un compilatore Microsoft (VisualStudio - è tutto già configurato) ma anche in altri IDE (tipo Borland) di solito è già tutto a posto. Un'ultima cosa: nella prima guida, ho dato un'occhiata al programma di esempio "bannerscan.c" in cui prova ad usare un socket non bloccante. Puoi leggerlo se vuoi, ma non prenderlo ad esempio ![]() Ciao ![]()
__________________
- 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 |
![]() |
![]() |
![]() |
#12 | |
Senior Member
Iscritto dal: Jan 2006
Messaggi: 2722
|
Quote:
Per comunicare, il meccanismo mailslot utilizza messaggi datagram (UDP) che non garantiscono alcun controllo sull'effettiva ricezione del messaggio. Se da un lato sono asincroni, e quindi evitano al programmatore i vari controlli sull'invio dei messaggi, dall'altro non puoi sapere se il messaggio inviato è stato effettivamente ricevuto oppure no. Quando si lavora con una mole di dati più consistente, diventa davvero inopportuno rischiare che il dato non arrivi a destinazione. Un'altra pecca è che i mailslot non sono portabili (sono supportati solo da sistemi Windows) a differenza dei sockets.
__________________
- 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 |
|
![]() |
![]() |
![]() |
#13 | |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7027
|
Quote:
per quanto riguarda le mailslot è vero che sono basate su un protocollo inaffidabile ma non concordo con il discorso sul lavorare con una grande mole di dati. una volta che il programmatore è "aware" del fatto che il protocollo sottostante è inaffidabile, il meccanismo di per se' rimane comunque più semplice da gestire rispetto a qualsiasi altro meccanismo sincrono: il fatto che io debba inviare dati da molti punti del codice non significa che per ciascuno di quei punti io debba fare altrettanti controlli circa l'arrivo o meno del messaggio; il controllo lo faccio una volta sola per tutte in una funzione apposita, e solo se serve perché in realtà considerando che il programmatore è cosciente di basarsi su un protocollo inaffidabile, progetterà la sua architettura di conseguenza, cioè senza mai fare in modo che tra una ricezione e l'altra i dati assumano uno stato incosistente. ovviamente il programmatore deve sempre valutare se nel suo caso sia realmente opportuno basarsi su un protocollo inaffidabile. e poi via, se la rete è in buone condizioni fisiche quante volte le mailslot falliranno? anzi, a me pare che spesso funzionino bene il doppio o il triplo di come dovrebbero... ![]() |
|
![]() |
![]() |
![]() |
#14 | |
Senior Member
Iscritto dal: Jan 2006
Messaggi: 2722
|
Quote:
Comunque non ho capito una cosa del tuo ragionamento. Giacchè i mailslots usano un protocollo di trasporto inaffidabile, si pone il seguente problema: 1) un mailslot client invia un messaggio ad un mailslot server (magari in broadcast) 2) i mailslot server, controllando la coda messaggi, NON possono sapere se qualche messaggio è stato inviato (se trovano la coda vuota). Tu mi dici che il programmatore, sapendo questo, organizza l'architettura di invio/ricezione in modo più intelligente. Ok, mi viene in mente ad esempio di fare una sorta di handshaking tra mailslot client e server per minimizzare il rischio di perdita messaggi. In questo caso però il numero di messaggi da scambiare tra client e server per singola transazione aumenta, peggiorando le prestazioni. Il discorso nasce dal fatto che dici "il fatto che io debba inviare dati da molti punti del codice non significa che per ciascuno di quei punti io debba fare altrettanti controlli circa l'arrivo o meno del messaggio; il controllo lo faccio una volta sola per tutte in una funzione apposita" Come fai a controllare se il messaggio è arrivato? Devi implementare comunque un'architettura più sicura credo (tipo handshake). EDIT: dimenticavo, i socket non sono necessariamente sincroni ![]() ![]()
__________________
- 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- : 20-02-2006 alle 12:35. |
|
![]() |
![]() |
![]() |
#15 |
Senior Member
Iscritto dal: Jul 2005
Città: San Marino
Messaggi: 308
|
Codice PHP:
![]()
__________________
![]() ![]() |
![]() |
![]() |
![]() |
#16 | |
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:
![]() comunque l'ip non si mette in quel modo ![]() ~§~ 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 |
|
![]() |
![]() |
![]() |
#17 |
Senior Member
Iscritto dal: Jan 2006
Messaggi: 2722
|
@ 17Qwerty71
Sì, devi indicare al compilatore che vuoi usare la libreria winsock2.dll. Per farlo, ad esempio con visual studio, basta andare nelle opzione del progetto e, nella sezione (se non sbaglio) link (dai un'occhiata...), devi dire di includere lo stub 'winsock2.lib'. Lo stub .lib è uno speciale file include che informa il compilatore di linkare vs winsock2.dll
__________________
- 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 |
![]() |
![]() |
![]() |
#18 |
Senior Member
Iscritto dal: Nov 2002
Messaggi: 4329
|
e io che ho letto la guida e non ho idea di che farci con sti socket?? sono stupido? cioe, vorrei fare qualcosa di semplice per vedere se ho capito, ma non so nemmeno da dove partire...mi fa piacere che mi venga spiegato come si programmano i socket, ma alla fine di quella guida minuscola e e sicuramente non esaustiva c e una perla: "ora che sappiamo programmare i socket, possiamo fare fakemailers, trojan, eccetera"...sono sempre piu convinto di non avere alcuna dote naturale per la programmazione, perche io dopo aver letto quella guida, ne so sui socket quanto ne sapevo prima, cioe nulla; non so perche funzionano, non so cosa sono, non so come utilizzarli...so solo a grandi linee cosa fanno e come si devono utilizzare...possibile che ci esistano cervelloni che dopo aver letto una guida simile, a digiuno completo di socket, possano scrivere un programma qualsiasi che compila ed esegue qualcosa? non so tipo far venire fuori un messaggio "ciao!" in un computer in lan o sul proprio schermo? bah, ho sbagliato universita, me ne convinco sempre di piu ormai
![]()
__________________
|18k+|slk800|a7n8x|1Gb/ddr400|Gf4mx440|Pio108|WD 160Gb|Case|Uni|Album|AnimeClick|OneManga| |ClassicThrash!|BNR Metal|TrueMetal|Dime|Chuck| |
![]() |
![]() |
![]() |
#19 | |
Senior Member
Iscritto dal: Jan 2006
Messaggi: 2722
|
Quote:
Cmq per programmare i socket ci vuole come prerequisito una sufficiente conoscenza della programmazione C. Cos'è che non ti è chiaro?
__________________
- 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 |
|
![]() |
![]() |
![]() |
#20 |
Senior Member
Iscritto dal: Nov 2002
Messaggi: 4329
|
mi sono espresso malissimo perche ero amareggiato...il mio problema non è tanto il non avere capito un h, che è risolvibile...il mio problema è che non ho in alcun modo l acume per articolare un ragionamento su quello che ho letto...non ho assolutamente idea di come produrre qualcosa che funzioni (anche qualcosa di basilare, come un esempio di stampa di "ciao"), mentre da quello che mi sembra di capire, dovrei eccome...la base in c ce l ho, altrimenti non avrei nemmeno guardato il 3d (certo in java me la cavo di piu, ma non mi spaventa guardare 2 righe di c)
ad esempio: i due stralci server.c e client.c che ci sono in quella guida...che fanno? ho provato a pastarli in codeblocks e ed eseguirli ma non succede nulla...la cosa piu deprimente è che parlo come un niubbo totale ("ho provato ad eseguirli ma non succede nulla", odioso...) quando non lo sono, o non dovrei esserlo giacche sono ormai 3 anni che me la sbuccio con la programmazione all uni...a volte ci provo a pensare di non essere inutile, ma non c e verso, non c e una sola cosa che padroneggi bene, non mi stupirei di sbagliare un algoritmo elementare sugli array a questo punto...
__________________
|18k+|slk800|a7n8x|1Gb/ddr400|Gf4mx440|Pio108|WD 160Gb|Case|Uni|Album|AnimeClick|OneManga| |ClassicThrash!|BNR Metal|TrueMetal|Dime|Chuck| |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:07.