Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione OPPO Find X9 Ultra: è lui il cameraphone definitivo
Recensione OPPO Find X9 Ultra: è lui il cameraphone definitivo
Find X9 Ultra è lo smartphone che tanti aspettavano, e finalmente è arrivato anche in Italia. Abbiamo provato il flagship di OPPO per diverse settimane, e siamo volati fino in Cina alla sua presentazione ufficiale. Tutto gira intorno al suo incredibile comparto fotografico in collaborazione con Hasselblad e con un totale di sei fotocamere. Il resto è un mix di specifiche di altissimo livello, così come il prezzo. Vi raccontiamo tutto nella nostra recensione completa.
Ecovacs Deebot X12 OmniCyclone: lava grazie a FocusJet
Ecovacs Deebot X12 OmniCyclone: lava grazie a FocusJet
Il nuovo Deebot X12 OmniCyclone abbina un sistema di raccolta dello sporco senza sacchetto, un rullo di lavaggio esteso e la tecnologia FocusJet per intervenire più efficacemente sulle macchie più persistenti. Un robot completo e preciso che aiuta a tenere puliti i pavimenti di casa con il minimo sforzo
Narwal Flow 2: la pulizia di casa con un mocio a nastro
Narwal Flow 2: la pulizia di casa con un mocio a nastro
Narwal Flow 2 implementa un mocio a nastro che esegue una pulizia dettagliata del pavimento di casa, in abbinamento ad un potente motore di aspirazione della polvere: un prodotto ideale per gestire in autonomia e con grande efficacia le necessità di pulizia dei pavimenti di casa
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 10-04-2012, 12:01   #1
bonino33
Junior Member
 
Iscritto dal: Apr 2012
Messaggi: 6
[C++] Creare chat con più persone

salve,

avrei in mente di creare una chat in c++ per più persone utilizzando un server.
ma il mio problema è che non so da dove cominciare con il codice.
bonino33 è offline   Rispondi citando il messaggio o parte di esso
Old 10-04-2012, 12:17   #2
sal_rob
Senior Member
 
Iscritto dal: Feb 2001
Messaggi: 290
Ciao,
Io ho creato la chat tra più persone, con un server, utilizzando VB6 (che ti consiglio vivamente se non sei vincolato al C++), posso darti qualche dritta se vuoi.

Io ho creato la comunicazione con la seguente logica:

User1 (Invia messaggio a User 2) ->(IP)Server ->(IP)User2 (riceve messaggio)

User2 (risponde al messaggio di User1) ->(IP)Server ->(IP)User1 (riceve risposta)

Per fare questo mi sono servito della comunicazione tramite Socket (ti consigliavo VB6, per la semplicità di gestione dei socket)
Inoltre visto che la comunicazione avviene esclusivamente come stringa inviata al IP, ho creato una sintassi delle Stringhe per la "gestione del sistema" ( es: #!&%|RichiestaConnessione|%&!# - 192.168.0.xxx - USERxxx - PWxxx indicava al server che l'utente con IP 192.168.0.xxx richiede di connettersi con il profilo USERxxx e Password PWxxx).

Questo dovrebbe darti un indicazione di massima.

Se serve qualche altra info, fammi sapere.

Ciao.
__________________
S.M. Asus P5KC - Q6600 - 2 Gb Ram - Geforce 8800GT.
sal_rob è offline   Rispondi citando il messaggio o parte di esso
Old 10-04-2012, 13:21   #3
ingframin
Senior Member
 
L'Avatar di ingframin
 
Iscritto dal: Apr 2010
Città: Leuven
Messaggi: 667
Beh, potresti partire da qui:
http://beej.us/guide/bgnet/output/print/bgnet_A4_2.pdf

Se sei proprio a digiuno di reti ti consiglio di comprarti il libro di Andrew Tanenbaum "Reti di Calcolatori" o almeno leggerti delle dispense.
Affrontare la programmazione di rete senza conoscere bene le reti puo' essere a dir poco traumatico...
__________________
L'elettronica digitale non esiste, è solo elettrotecnica con interruttori piccoli!
ingframin è offline   Rispondi citando il messaggio o parte di esso
Old 10-04-2012, 13:31   #4
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 12966
Fare codice nuovo in VB6 nel 2012 mi sembra una follia... semmai usa .NET.

Comunque potresti usare le librerie Qt per C++, che ti mettono a disposizione oltre alla parte grafica anche una libreria enorme di classi, tra cui quelle per la gestione di rete.

Detto ciò, bisogna vedere che tipo di chat vuoi realizzare... a stanze oppure per lista di contatti (come MSN ad esempio)...
WarDuck è offline   Rispondi citando il messaggio o parte di esso
Old 10-04-2012, 13:32   #5
bonino33
Junior Member
 
Iscritto dal: Apr 2012
Messaggi: 6
il mio problema è quello di fare in modo che più client potesssero accedere a un unico server.
bonino33 è offline   Rispondi citando il messaggio o parte di esso
Old 10-04-2012, 15:37   #6
clockover
Senior Member
 
L'Avatar di clockover
 
Iscritto dal: Oct 2004
Messaggi: 1945
Quote:
Originariamente inviato da bonino33 Guarda i messaggi
il mio problema è quello di fare in modo che più client potesssero accedere a un unico server.
Hai problemi ad implementare un server multithreading?
clockover è offline   Rispondi citando il messaggio o parte di esso
Old 10-04-2012, 15:54   #7
nico159
Senior Member
 
Iscritto dal: Aug 2003
Città: Barletta (BA)
Messaggi: 939
Quote:
Originariamente inviato da bonino33 Guarda i messaggi
salve,

avrei in mente di creare una chat in c++ per più persone utilizzando un server.
ma il mio problema è che non so da dove cominciare con il codice.
Devi realizzare anche un server? Se sì la faccenda si fa più complicata

Prima di tutto devi capire quali funzionalità la chat ed il server devono avere

Devi definire un tuo protocollo, un framing...oppure vedere se qualcuno di già preesistente può fare al caso tuo (IRC, XMPP (mha...))
Attento se scegli la strada del definire un tuo protocollo nel valutare se avrai bisogno di inviare dati in formato binario oltre che a quello "testo" (file tra utenti, avatar e così via) - potresti ritrovarti nella situazione di XMPP dove file/avatar e così via devono essere scambiati in base64

Ti ricordo che in informatica non esiste alcun "plain text" quindi dovrai scegliere anche una tua codifica del testo (utf8?)

Inoltre sarebbe il caso prevedere l'uso di TLS ad esempio per la criptazione della comunicazione client/server

Devi assolutamente avere buone conoscenze di C++
Un server che fa memory leak per poi essere killato dall'OS oppure che va in crash renderà il tutto inutilizzabile

Poi devi sapere le basi del networking, tcp/ip e capire BENE come funzionano i socket

Per C++ c'è l'ottima libreria Boost Asio: http://www.boost.org/doc/libs/1_49_0...oost_asio.html che ti aiuterà molto sotto questo aspetto

Devi capire se prendere la strada del multi threading tramite i threads e comunicazione tramite shared memory oppure scegliere la strada dell'event based con operazioni asincrone basate sulle "promesse" (per esempio Javascript, Python con Twisted e così via)
Nel caso scegliessi la seconda strada - dimenticati la possibilità di sfruttare al pieno le cpu/core del tuo server a meno che di non avere più processi che comunicano tra di loro
Se scegli la prima strada fai molta attenzione di aver capito prima: il memory model di C++ (da C++11 ne ha uno), come una cpu x64 riordina le istruzioni, la cache coherence tra i vari core, le varie tipologie di lock e sopratutto perchè e dove devi usare i lock, i problemi dei lock (deadlock, livelock, priority inversion...)
Attenzione se scegli la strada del multi threading: le implementazioni ufficiali di alcuni linguaggi (Ruby, Python...) hanno un lock globale che rende impossibile sfruttare i core/cpu dei moderni server - in queste situazioni la soluzione è la stessa usata dai server asincroni: più processi che comunicano tra di loro - aggiungendo comunque complessità
Esiste una terza strada "Agents/Message passing" che viene sfruttata da Erlang ed esistono librerie per altri linguaggi (Java, Scala, Python, F#, non ho idea per C++...) il concetto è semplice: i task non condividono niente e si scambiano tra di loro messaggi per tenersi informati sui cambi di stato
E' un approccio interessante perchè rende più facile il multi threading evitando la necessità di lock. E' anche da considerare che potenzialmente un server che sfrutta gli agents può distribuibile su più server il lavoro (ma in questo caso devi fare MOLTA attenzione alla lentezza che si introduce nella comunicazione server-server)
I contro di questo approccio è l'overhead generato dal continuo scambio di messaggi tra i task
Ad oggi la maniera più efficiente per scrivere server multithread è l'utilizzo dei threads con comunicazione tramite shared memory a costo di una complessità maggiore

La scelta dipende principalmente dai tempi di sviluppo e da quanto costa mantenere un server più costoso/più server rispetto ai costi di sviluppo (ovviamente un server scritto in Erlang ha bisogno di più risorse dato un pari carico rispetto ad uno in C++ che usa i threads)

Fare molta attenzione nel validare ciò che il server/client riceve - evita al minimo l'uso di puntatori (usa gli smart pointers/move semantics - supportati dalle ultime versioni di GCC e Visual Studio), usa parti della STD come string, non usare array ma preferisci i container STL come Vector

Se prevedi che il tuo server avrà fortuna (parlo di tipo oltre 5000 utenti connessi) fai molta attenzione agli algoritmi che andrai ad usare (sopratutto il cambio di stato dei contatti) e le strutture dati utilizzate

Non preoccuparti, la parte client è nettamente più semplice
__________________
In a world without fences, who needs Gates?
Power by: Fedora 8 - Mac OS X 10.4.11

Ultima modifica di nico159 : 10-04-2012 alle 19:21.
nico159 è offline   Rispondi citando il messaggio o parte di esso
Old 10-04-2012, 16:45   #8
bonino33
Junior Member
 
Iscritto dal: Apr 2012
Messaggi: 6
io in realtà volevo soltanto realizzare una chat per poche persone,
dove i client si connettevano al server per chattare
bonino33 è offline   Rispondi citando il messaggio o parte di esso
Old 10-04-2012, 16:48   #9
clockover
Senior Member
 
L'Avatar di clockover
 
Iscritto dal: Oct 2004
Messaggi: 1945
Quote:
Originariamente inviato da bonino33 Guarda i messaggi
io in realtà volevo soltanto realizzare una chat per poche persone,
dove i client si connettevano al server per chattare
In realtà non ci hai dato molte indicazioni di cosa hai bisogno... di cosa hai bisogno realmente in termini tecnici. Abbiamo capito che vuoi fare una chat. Ma che conoscenze hai e dove trovi problemi?
clockover è offline   Rispondi citando il messaggio o parte di esso
Old 10-04-2012, 17:01   #10
bonino33
Junior Member
 
Iscritto dal: Apr 2012
Messaggi: 6
ho gia realizzato una chat ma solo per 2 persone. e volevo realizzare una chat con più persone e un server che ospitasse il tutto.
il mio problema era fare accedere più client allo stesso server
bonino33 è offline   Rispondi citando il messaggio o parte di esso
Old 10-04-2012, 17:03   #11
clockover
Senior Member
 
L'Avatar di clockover
 
Iscritto dal: Oct 2004
Messaggi: 1945
Quote:
Originariamente inviato da bonino33 Guarda i messaggi
ho gia realizzato una chat ma solo per 2 persone. e volevo realizzare una chat con più persone e un server che ospitasse il tutto.
il mio problema era fare accedere più client allo stesso server
Quindi, e lo ripeto, il tuo problema sta nel creare un server multithreading?
clockover è offline   Rispondi citando il messaggio o parte di esso
Old 10-04-2012, 17:08   #12
bonino33
Junior Member
 
Iscritto dal: Apr 2012
Messaggi: 6
esatto
bonino33 è offline   Rispondi citando il messaggio o parte di esso
Old 10-04-2012, 17:16   #13
clockover
Senior Member
 
L'Avatar di clockover
 
Iscritto dal: Oct 2004
Messaggi: 1945
Allora prima di pensare alla chat comincia a capire bene come funzionano i thread. Da uno sguardo a questo tutorial che sembra davvero ben fatto.

http://www.yolinux.com/TUTORIALS/Lin...ixThreads.html

Per il momento puoi arrivare a fare fino alla sincronizzazione dei thread (Thread Synchronization)

Quando hai capito come funzionano continuiamo a parlare della chat e di come è possibile implementarla.
clockover è offline   Rispondi citando il messaggio o parte di esso
Old 10-04-2012, 18:59   #14
nico159
Senior Member
 
Iscritto dal: Aug 2003
Città: Barletta (BA)
Messaggi: 939
Non ho ben capito perchè vuoi usare C++ quanto mi pare capire che lo conosci in maniera molto vaga, ma sopratutto perchè non puoi usare chat server già esistenti

Quello che vuoi fare non è esattamente banale
__________________
In a world without fences, who needs Gates?
Power by: Fedora 8 - Mac OS X 10.4.11
nico159 è offline   Rispondi citando il messaggio o parte di esso
Old 10-04-2012, 19:02   #15
clockover
Senior Member
 
L'Avatar di clockover
 
Iscritto dal: Oct 2004
Messaggi: 1945
Quote:
Originariamente inviato da nico159 Guarda i messaggi
Non ho ben capito perchè vuoi usare C++ quanto mi pare capire che lo conosci in maniera molto vaga, ma sopratutto perchè non puoi usare chat server già esistenti

Quello che vuoi fare non è esattamente banale
Secondo me invece è molto istruttivo creare una chat. Però per farla in un certo modo non banale sicuramente.
clockover è offline   Rispondi citando il messaggio o parte di esso
Old 11-04-2012, 07:14   #16
ingframin
Senior Member
 
L'Avatar di ingframin
 
Iscritto dal: Apr 2010
Città: Leuven
Messaggi: 667
Se è per poche persone comunque io userei python o java... Non ha senso sbattere la testa contro c++ per così poco carico, inoltre i concetti di base sono sempre quelli, non è difficile cambiare linguaggio a prototipo ultimato e funzionante.
__________________
L'elettronica digitale non esiste, è solo elettrotecnica con interruttori piccoli!
ingframin è offline   Rispondi citando il messaggio o parte di esso
Old 12-04-2012, 12:40   #17
bonino33
Junior Member
 
Iscritto dal: Apr 2012
Messaggi: 6
come è possibile utilizzare i thread per realizzare la chat
bonino33 è offline   Rispondi citando il messaggio o parte di esso
Old 12-04-2012, 18:04   #18
Mulder90
Senior Member
 
L'Avatar di Mulder90
 
Iscritto dal: Aug 2008
Città: Firenze
Messaggi: 317
Quote:
Originariamente inviato da bonino33 Guarda i messaggi
come è possibile utilizzare i thread per realizzare la chat
non ha aperto nemmeno i link....
Mulder90 è offline   Rispondi citando il messaggio o parte di esso
Old 13-04-2012, 16:39   #19
ingframin
Senior Member
 
L'Avatar di ingframin
 
Iscritto dal: Apr 2010
Città: Leuven
Messaggi: 667
Quote:
Originariamente inviato da bonino33 Guarda i messaggi
come è possibile utilizzare i thread per realizzare la chat


Guarda il link che ti ho postato!
In quel libro c'e' spiegato tutto quello che ti serve incluso come fare la chat coi thread!
__________________
L'elettronica digitale non esiste, è solo elettrotecnica con interruttori piccoli!
ingframin è offline   Rispondi citando il messaggio o parte di esso
Old 13-04-2012, 16:41   #20
clockover
Senior Member
 
L'Avatar di clockover
 
Iscritto dal: Oct 2004
Messaggi: 1945
Quote:
Originariamente inviato da ingframin Guarda i messaggi


Guarda il link che ti ho postato!
In quel libro c'e' spiegato tutto quello che ti serve incluso come fare la chat coi thread!
sei matto... tutte quelle pagine
clockover è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione OPPO Find X9 Ultra: è lui il cameraphone definitivo Recensione OPPO Find X9 Ultra: è lui il c...
Ecovacs Deebot X12 OmniCyclone: lava grazie a FocusJet Ecovacs Deebot X12 OmniCyclone: lava grazie a Fo...
Narwal Flow 2: la pulizia di casa con un mocio a nastro Narwal Flow 2: la pulizia di casa con un mocio a...
Tastiera gaming MSI GK600 TKL: switch hot-swap, display LCD e tre modalità wireless Tastiera gaming MSI GK600 TKL: switch hot-swap, ...
DJI Osmo Pocket 4: la gimbal camera tascabile cresce e ha nuovi controlli fisici DJI Osmo Pocket 4: la gimbal camera tascabile cr...
Stretto di Hormuz, finti funzionari iran...
Dragon Ball Xenoverse 3 annunciato uffic...
WINDTRE BUSINESS potenzia i servizi IoT ...
OPPO rinnova l'ecosistema: arrivano Watc...
OPPO Find X9 Ultra ufficiale: debutta il...
Renault Twingo: esposta a Milano per far...
Intel vuole cambiare: overclocking anche...
Anche PlayStation introduce la verifica ...
Samsung ed Sk hynix, i bonus per gli ope...
Windows 11 velocizza Esplora File: ecco ...
Funzioni nascoste nelle librerie ADLX Ra...
Itala rinasce: lo storico marchio automo...
Huawei Watch Fit 5 e 5 Pro ufficiali: di...
ECOVACS DEEBOT T90 PRO OMNI vs Roborock ...
Fastweb scompare dai partner Starlink Mo...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 14:26.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v