PDA

View Full Version : [c++, ma anche altre lingue] Creare Server e accederci


martino.ugolini
09-05-2010, 19:34
Salve,

Allora: Io sto pensando di creare (come esercizio personale) un programma chat in c++ console. Il mio problema è che avrò bisogno di un server, col quale quelli che usano il mio programma possano comunicare tramite il server tra di loro. Però io non ho la più pallida idea da dove incominciare:
1. Devo prendere un Computer, installarci sopra Ubuntuserver o simili e tenerlo acceso 24 ore al giorno, o c'è un altro modo???
2. E poi come si ad'accedere con un programma c++ a questo server???

Per favore chiaritemi le idee

nuovoUtente86
09-05-2010, 20:09
Salve,

Allora: Io sto pensando di creare (come esercizio personale) un programma chat in c++ console. Il mio problema è che avrò bisogno di un server, col quale quelli che usano il mio programma possano comunicare tramite il server tra di loro. Però io non ho la più pallida idea da dove incominciare:
1. Devo prendere un Computer, installarci sopra Ubuntuserver o simili e tenerlo acceso 24 ore al giorno, o c'è un altro modo???
2. E poi come si ad'accedere con un programma c++ a questo server???

Per favore chiaritemi le idee

1 Un server spento, evidentemente, non serve a nulla. Per cui se non ti va di basare il progetto su questa archittettura devi cambiarla passando ad un paradigma p2p oppure ibrido.

2 Devi utilizzare i socket, basati presumilmente (ma ciò dipende dalle valutazioni del caso particolare) sul protocollo di trasporto TCP

Teo@Unix
09-05-2010, 20:15
Devi guardarti i principi di programmazione client-server.

Il server dovrà stare sempre acceso.... questo per forza se vuoi che la chat sia accessibile sempre.

Il server dovrà gestire più connessioni, sarà un server concorrente.

In rete trovi davvero molta documentazione su questo argomento. Quando il server riceve una richiesta di connessione dal client, crea un processo filgio o un thread.
Questo gestirà il dialogo con il client.
Se lo fai in C++, il lavoro è abbastanza facilitato dato che esistono librerie che implementano giù parecchi automatismi.

Per cominciare dai un occhio qui (http://www.lilik.it/~mirko/gapil/gapilsu199.html#x548-26000013.1.1). (è C ma ti spiega bene il principio di funzionamento)

Teo@Unix
09-05-2010, 20:19
1 Un server spento, evidentemente, non serve a nulla. Per cui se non ti va di basare il progetto su questa archittettura devi cambiarla passando ad un paradigma p2p oppure ibrido.

2 Devi utilizzare i socket, basati presumilmente (ma ciò dipende dalle valutazioni del caso particolare) sul protocollo di trasporto TCP

meglio p2p. :D

fero86
09-05-2010, 20:22
in alternativa ai socket potresti usare una tecnologia di remoting, che ti semplificherebbe le cose risparmiandoti la progettazione di un protocollo. l'unica tecnologia di remoting decente che io conosca per C++ é COM, ma funziona solo su Windows e se cominci ora ad impararla finirai senza esagerare l'anno prossimo. di conseguenza un'ottima idea potrebbe essere quella di passare a C# e giocare con WCF. altrimenti se tieni alla portabilitá puoi usare Java ed RMI, ma scoprirai che WCF é tutta un'altra cosa.

fero86
09-05-2010, 20:25
meglio p2p. :D peró é bene fare presente che l'architettura P2P comporta necessariamente l'inserimento da parte dell'utente di indirizzi IP almeno una volta (se speri di ritrovare gli stessi indirizzi anche la volta dopo, altrimenti sempre).

EDIT - inoltre un'architettura P2P é soggetta a limitazioni dovute ai vari tipi di firewall.

tomminno
09-05-2010, 23:28
l'unica tecnologia di remoting decente che io conosca per C++ é COM, ma funziona solo su Windows e se cominci ora ad impararla finirai senza esagerare l'anno prossimo.

Ci sono anche CORBA e ICE, ma ovviamente dato il tenore delle domande direi che sono fuori portata.
ICE (disponibile anche per C# e Java) è probabilmente molto più semplice di COM e CORBA, e ha prestazioni che WPF si sogna :D

martino.ugolini
10-05-2010, 16:19
Se si usa il p2p c'è bisogno di un server???

pabloski
10-05-2010, 16:54
Salve,

Allora: Io sto pensando di creare (come esercizio personale) un programma chat in c++ console. Il mio problema è che avrò bisogno di un server, col quale quelli che usano il mio programma possano comunicare tramite il server tra di loro. Però io non ho la più pallida idea da dove incominciare:
1. Devo prendere un Computer, installarci sopra Ubuntuserver o simili e tenerlo acceso 24 ore al giorno, o c'è un altro modo???
2. E poi come si ad'accedere con un programma c++ a questo server???

Per favore chiaritemi le idee

nel tuo caso il p2p lo sconsiglierei, ti costringe solo ad implementare un sacco di codice per gestire il bootstrapping della rete p2p, peggio ancora se usi un dht

il server può benissimo essere il tuo pc, usi dyndns per collegarlo ad un nome di dominio e il gioco è fatto

per quanto riguarda la chat dipende dal protocollo che vuoi usare....nel 1999 creai un banale programma di chat basato sul protocollo irc e devo dire che è di una semplicità incredibile

tanto per capirci guarda quai http://irchelp.org/irchelp/rfc/chapter4.html#c4_3

come vedi la comunicazione avviene tramite l'invio di banali stringhe di testo contenenti un comando e un certo numero di parametri

per inviare le stringhe usi ovviamente i socket o qualsiasi altro meccanismo di comunicazione via rete ( curl per esempio sarebbe un'ottima scelta )

detto questo per un programma di chat non sei necessariamente vincolato al C++, puoi benissimo usare python ad esempio, così risparmi tempo, bug e puoi metterci pure una bella interfaccia

la cosa si fa più complicata se decidi di infilarci audio e video

fero86
10-05-2010, 18:46
Se si usa il p2p c'è bisogno di un server??? questa domanda comporta qualche problema di nozioni di base :stordita:
io posso anche risponderti, ma una volta che l'ho fatto e che tu hai detto a te stesso "bene, allora creeró un'architettura P2P" che ci hai concluso visto che non sai cos'é un'architettura P2P? la mia risposta é no, non c'é bisogno di un server perché un'architettura P2P é un'architettura che non si basa su un server.

cdimauro
10-05-2010, 21:55
Ci sono anche CORBA e ICE, ma ovviamente dato il tenore delle domande direi che sono fuori portata.
ICE (disponibile anche per C# e Java) è probabilmente molto più semplice di COM e CORBA, e ha prestazioni che WPF si sogna :D
Ice: a framework for middlewares (http://www.pycon.it/conference/talks/ice-a-framework-for-middlewares) :fiufiu: :D

Togli pure il "probabilmente": è di gran lunga più semplice. :cool: