Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
.NET Framework
Socket UDP
venerdì 30 gennaio 2004 - 18.21
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
vale
Profilo
| Newbie
1
messaggi | Data Invio:
ven 30 gen 2004 - 18:21
Ciao a tutti,
vi espongo il mio problema:
vorrei testare la qualità del collegamento radio tra un client ed un server inviando un certo numero di pacchetti UDP in modo continuo tra i due(ossia uno che trasmette solamente ed uno che riceve solamente)e vedendo il rapporto tra quelli inviati e quelli persi.In particolare ho scritto un programma in cui lancio dapprima il server che si mette in ascolto su un certo porto e poi il client che,dopo essere stato riconosciuto dal server gli "spara" 5120 pacchetti UDP di 1024 Bytes dove ciascuno dei 1024 Bytes all'interno del pacchetto è costituito da un numero casuale(per evitere di inviare pacchetti tutti uguali).
Il problema è che,essendo la connessione non affidabile(UDP) se uno dei 5120 pacchetti inviati dal client viene perso,essendo il metodo
numbytes=sock_serv.ReceiveFrom(pacchetto,ref client);
presente all'interno del Server di tipo bloccante,quando un pacchetto viene perso il server si rimane in attesa fermando il contatore all'ultimo spacchetto corretto ricevuto mentre il client continua ad inviarli.
Secondo voi come potrei fare per costringere il server a "fregarsene" del pacchetto perso e continuare la ricezione degli altri seguenti(forse un evento )?
Grazie
Brainkiller
Profilo
| Guru
7.999
messaggi | Data Invio:
ven 30 gen 2004 - 18:59
Ciao,
come ben saprai ci sono due tipi di Socket, sincroni e asincroni. Il sincrono è una specie di botta e risposta, probabilmnete come lo stai usando tu. Cioè invii e poi ricevi e resti in attesa, se non arrivano più pacchetti lui resta sempre in attesa, si chiama appunto blocking-call visto che resta fermo ad aspettare, inoltre se non hai dedicato un thread alla receive l'applicazione sembra bloccata :)
Il modo asincrono invece è appunto il contrario, cioè tu invii dei pacchetti e/o li ricevi, ma è un evento tramite un delegate che scatta quando arrivano dei pacchetti, quindi la chiamata è "non blocking".
I due tipi di socket vengono usati in scenari diversi per esempio un client di posta potrebbe usare il socket sincrono perchè la sequenza dei comandi inviati e ricevuti è conosciuta ed è ordinata, diverso invece il caso di un server per la chat per esempio in cui un messaggio di un utente può arrivare in qualunque momento quindi l'applicazione server non può restare bloccata.
Non ho ancora visto il tuo codice ma se usi la classe UdpClient i metodi sono sincroni, quindi ti conviene usare la più generale Socket e creare dei socket appunto per UDP e usare le funzioni BeginReceive, BeginSend, EndReceive, EndSend sul Framework è abb. documentato.
ciao
david
val
Profilo
| Newbie
15
messaggi | Data Invio:
mar 3 feb 2004 - 13:39
Grazie tante ho fatto come dicevi tu ed ora funziona..
ora vorrei passare all'interfaccia grafica in modo da poter settare i parametri del collegamento tramite form.Qualche idrea?
Brainkiller
Profilo
| Guru
7.999
messaggi | Data Invio:
mar 3 feb 2004 - 18:04
In che senso, che problema hai?
ciao
david
val
Profilo
| Newbie
15
messaggi | Data Invio:
mar 3 feb 2004 - 18:18
Mi spiego..
vorrei poter settare ad es.l'intervallo temporale tra l'invio di 2 pacchetti consecutivi da una form..il problema è che essendo nuovo alla programmazione Windows(Form) non ho ancora idea di come poter pessare tramite form i parametri ai metodi,far partire client/server premendo un pulsante e cose del genere..
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !