View Full Version : server/client [c++]
Ciao!
Devo realizzare due entità ke si scambiano dati utilizzando il protocollo UDP.
Qlc sa dirmi dove posso trovare qlc di utile (anche magari parti di codice).
Ciao...grazie
Prova a dare un'occhiata qui: http://www.linuxgazette.com/node/view/8758
interessante...ora ci lavoro dietro un po', sperando di riuscire ad inviare qlc file :)
Ma questi dove hanno imparato a programmare? :-/
Il codice è scritto con i piedi...no comment...
C'è un secondo post con i sorgenti praticamente rifatti e molto meglio...
Ho un problema simile.
Devo realizzare una chat. Quindi due programmi, un client e un server.
La piattaforma che utilizzo è Windows Xp.
Magari conoscete codice per Microsoft Visual Studio 6.0 per le MFC. (Visual c++)
Se conoscete anche un modo per ridurre al minimo il ping perchè la chat dovrà gestire + di 1000 utenti contemporaneamente!
Altra domanda.
Il server girerà su un pc desktop con connessione Adsl 640.
Pensate che riesca a gestire più di 1000 utenti?
Avevo pensato di utilizzare magari più di un server da collegare tra loro per gestire il carico. Come posso fare?
Grazie e scusate se ho fatto troppe domande :D
IMHO realizza pure l'interfaccia in MFC, ma gestisci i socket nel modo standard (il codice sopra dovrebbe funzionare anche su Windows, magari con leggeri cambiamenti)...
Ho sviluppato in passato programmi che lavorano su Tcp/Ip con MFC, e sono rimasto estremamente deluso quando ho scoperto una grave pecca di MFC 4 (non so se abbiano fatto degli aggiustamenti in MFC 7): non è possibile utilizzare i sockets MFC (quindi CAsyncSocket e CSocket) in threads diversi, in nessun modo. :( :mc: :(:muro:
Io avevo la necessità di realizzare threads diversi nel server, che doveva avere la possibilità di gestire più connessioni contemporaneamente (anche il tuo suppongo), quindi non commettere il mio stesso errore, o rimarrai deluso :(.
Perciò segui il consiglio di cionci: sockets Win32 (che non sono neanche tanto più complicati rispetto a quelli MFC).
WinSock....divertiti :-)
Devi stare attento...da linux a win alcune funzioni cambiano nome, altre come la fork() nn ci sono proprio!
Ho trovato qlc tutorial fatto benino, ma nn ho trovato mai nessuno ke abbia sviluppato un programma ke trasmeste file utilizzando l'Udp protocol...nn sarà mica un pioniere?! :-)
credo di no, ma trovare un bel codice già fatto nn sarebbe male! :-P
La fork che c'entra con il winsock ?
I programmi peer2peer lavorano anche con UDP...
Non è impossibile, ma bisogna farsi il controllo di flusso e il controllo di errore a mano...
Il TFTP, uno dei primi protocolli per il trasferimento di file, lavorava proprio con UDP...
In effetti la parte di codice del client e del server la metterò in una dll. Il programma client MFC utilizzerà questa dll.
Quindi pensate che il link di partenza sia utile per me?
Fenomeno85
12-11-2004, 19:32
scusate ma è comodo programmare in MFC? :mbe:
altra cosa creare un socket in VB ci metti 3 righe in C++ ne escono un pò di + :)
Per la chat secondo me ci metti molto di meno a programmarla in VB e IMHO meglio usare una connessione TCP.
~§~ Sempre E Solo Lei ~§~
E' vero quello che dici, ma poichè mi serve un programma che "giri" molto più velocemente devo usare per forza il c++
Il VB lo usato tempo fa, ma l'eseguibile è molto più lento del corrispondente c++.
Inoltre lo sto facendo per imparare anche cose nuove :D
Fenomeno85
12-11-2004, 19:38
Originariamente inviato da songoge
E' vero quello che dici, ma poichè mi serve un programma che "giri" molto più velocemente devo usare per forza il c++
Il VB lo usato tempo fa, ma l'eseguibile è molto più lento del corrispondente c++.
Inoltre lo sto facendo per imparare anche cose nuove :D
ma sulla velocità non penso che influenzi ... se è per imparare fai bene :D
~§~ Sempre E Solo Lei ~§~
Per quel che sto facendo ti assicuro che mi serve tutta la velocità possibile!
Mi sto divertendo molto :sofico:
Originariamente inviato da Fenomeno85
altra cosa creare un socket in VB ci metti 3 righe in C++ ne escono un pò di + :)
Relativamente...
Prova a fare in VB certe cose che magari in C sono di una certa complessità e poi me lo ritorni a dire qual'è il più comodo ;)
Fenomeno85
13-11-2004, 10:09
Originariamente inviato da cionci
Relativamente...
Prova a fare in VB certe cose che magari in C sono di una certa complessità e poi me lo ritorni a dire qual'è il più comodo ;)
questo non lo metto in dubbio :) ... per una semplice chat la vedo + semplice crearla in vb niente di + :D
~§~ Sempre E Solo Lei ~§~
daniele_dll
14-11-2004, 10:19
beh, fisicamente, per problemi di banda, non credo tu possa teneer 1000 utenti su una adsl :)
poi dipende che protocollo usi...IRC, DirectConnect, uno tuo...
ad esempio il protocollo di DC è orrendo e consuma un mucchio di banda inutile con quello è già tanto che arrivi a tenere 200\300 utenti su una adsl 640 (con up a 256, ovvio)
per quanto riguarda la velocità ti sconsiglio di farlo in VB, parlo per esperienza, a me non riusciva a gestire + di 700/750 connessioni contemporanee e il codice penso di averlo scritto abbastanza bene.
comunque se scrivi codice "portabile" puoi compilarlo su svariate piattaforme, linux compreso, perché se ti servono MOLTE prestazioni, e ti serve far girare solo quello linux ha tanti fronzoli inutili in meno :)
poi credo che, scrivendo codice posix standard, usando le cygwin dovresti poter compilare su windows senza problemi, all'eseguibile windows basta che alleghi una libreria che è insieme alle cygwin e basta (il sottosistema posix in pratica)
se ti interessa una guida BEN FATTA (anche se ancora ci stanno lavorando su) cerca GAPIL su google :) [è in italiano]
inoltre se puoi utilizza pool e non select, pool è decisamente molto più performante (c'è anche epool, ma sono pochi i sistemi che lo supportano, se fai un check per verificaer se esiste o meno è ancora meglio perché riusciresti ad ottenere ancora maggiori prestazioni)
ah un'ultimo cosa, se vuoi un consiglio, non utilizzare un sistema a threads, ma utilizza un sistema asincrono, ovvero non far si che ogni utente venga gestito da un thread, perché 100 utenti = 100 threads, 1000 utenti = 1000 threads, e faresti fuori qualunque hardware di basso-medio livello, invece usando un sistema asincrono riusciresti a ottenere risultati eccellenti (ad esempio un software chiamato verlihub e scritto in C++, utilizzando questo sistema, riesce a gestire + di 6000 utenti [forse di +, ma era finita la banda disponibile])
sciauz :)
daniele_dll approfondisci ..............
Comunque se vuoi fare una cosa che sia veloce anche su Windows IMHO meglio evitare cygwin...
La programmazione socket è praticamente già portabile al 100%...il resto è da vedere...
Comunque è sempre meglio creare un pool di thread (4-5 thread + quello principale che attende le connessioni in ingresso) ed a questo pool di thread assegnare un tot di utenti...
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.