Socket TCP/IP - Problema buffer di ricezione

domenica 26 giugno 2011 - 20.15
Tag Elenco Tags  C#  |  .NET 4.0  |  Visual Studio 2010

luigi87 Profilo | Newbie

Salve a tutti.
Avrei un problema legato ad una console application che sto facendo. In pratica c'è un client che comunica con un server tramite socket TCP, ora io vorrei che la connessione resti sempre aperta tra client e server (a meno che uno dei due non muoia) in modo che, periodicamente, il server invii al client dei dati. Attualmente ho messo come tempo 5 secondi, quindi ogni 5 secondi il server manda dei dati al client.
Per far ciò sto utilizzando la BeginReceive e la EndReceive lato client, perché ho bisogno che il client faccia altro, mentre aspetta di ricever i dati dal server.
Fin qui tutto apposto, poiché la comunicazione tra i due funziona, il problema è che ad un certo punto, si satura il buffer di ricezione del client! Per ricevere i dati tramite BeginReceive , io utilizzo un byte[] di 20000 byte, poiché i dati inviati dal server sono molto grossi, quando il server invia la seconda volta i dati, questo buffer si riempie e, ovviamente, mi viene dato lato client l'errore di de-serializzazione non riuscita.
Ciò che non capisco è come mai succede questa cosa, nel senso che, quando il client legge questo byte[], recupera i dati, li processa e subito si rimette in ascolto di nuovi dati dal server, usando lo stesso buffer e richiamando quindi ricorsivamente la funzione del BeginReceive.
Avevo anche provato, prima di richiamare nuovamente la BeginReceive dopo una ricezione dei dati, a inizializzare nuovamente il byte[] che uso, ma niente.
Inoltre, una cosa strana che ho notato, è che quando recupero, tramite la EndReceive, il numero di byte letti e me lo faccio stampare, tale numero si incrementa ad ogni ricezione, cioè sembra che si accumulano i dati nel buffer, invece a me interessa che ci siano solo i nuovi dati.
Avete qualche idea e anche qualche spiegazione, su come risolvere questo problema?
Scusate la lunghezza della spiegazione, ma era per essere più preciso possibile.
Grazie.
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 !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5