Newsgroup: it.comp.lang.visual-basic
Titolo: Problemi con Winsock

Ciao,
ho un EXE Ax che incapsula il controllo Winsock.
Il mio problema è che se invio un pacchetto e, dopo la ricezione dell'evento SendComplete, 
ne invio _subito_ un altro e così via, il primo pacchetto inviato raggiunge il client, i 
seguenti no, questo non lo fa se 'aspetto' un po' (es. 100ms) tra una trasmissione e l'altra.
Avete idea di cosa potrebbe essere?
Tnx.
LeleB.

Mi sembra davvero strano.
Il protocollo TCP/IP non dà di questi errori (a meno che tu non stia 
lavorando in UDP ma il discorso cambia).
Sicuro che il problema non sia LOGICO nel senso che prima di inviare 
altri dati tu non debba attendere una qualche risposta dall'altro pc e 
senza questa risposta i tuoi dati vengono lasciati cadere nel vuoto?
-- 
Quando noi ignoranti eravamo di più, tutto era più bello...
(A. Celentano)
Per rispondermi in privato, prima togli l'immondizia dalla testa.

 ha scritto nel messaggio
news:eXKQd.36519$QG6.6...@twister2.libero.it...

Io ho avuto un problema simile nel gestire l'invio di Allegati molto grossi.
Ho risolto controllando il Buffer sulla quantità di Byte rimasti ricavandoli
dall'Evento SendProgress.
Per comodità ho inserito un Ciclo in cui memorizzo la lettura precedente
e l'attuale in questo modo.
   Do While mBytesRemaining > 4096
      lSendBuffSize = mBytesRemaining
      Do Until lSendBuffSize <> mBytesRemaining
            If mBytesRemaining < 4096 Then Exit Do
            Sleep (5)
            DoEvents
      Loop
   Loop
Uscendo dal ciclo il Buffer è < 4Kb quindi ti consente un nuovo
invio.
Almeno nel mio caso è stato risolutivo.
-- 
@Alex (Alessandro Baraldi)
---------------------------------------------------------------------------
http://www.sitocomune.com/
http://www.mantuanet.it/alessandro.baraldi/
---------------------------------------------------------------------------

 senza questa risposta i tuoi dati vengono lasciati cadere nel vuoto?
No.
Io ho creato l'Ax che un mio collega sta usando nel suo progetto..
Diciamo che è una sorta di wrapper.
Praticamente ho 2 array di Winsock: WServers e WClients che gestiscono 
rispettivamente il lato server ed il lato client del mio MultiSocket.
Quando l'utente vuole inviare dei dati, non faccio altro che scegliere 
il controllo corrispondente alla connessione sulla quale si vogliono 
inviare i dati ed inviarli.
Il mio collega, a sua volta, quando riceve l'evento SendComplete, invia 
un altro pacchetto.
Se lo invia subito non arriva a destinazione (e cmq non da nessun 
errore)...se prima di inviarlo aspetta circa 50-100 ms va tutto a buon fine.

 ha scritto nel messaggio
news:eXKQd.36519$
QG6.6...@twister2.libero.it

Anche io ho avuto problemi simili ma ho risolto in modo particolare che
comunque non ti sarebbe d'aiuto.
Ti consiglio di usare il Nane Algorithm
Una implementazione la trovi su 
http://www.vbsimple.net/cliserv/clser_06.htm
bye
-- 
Gestione Ottica - Gestionale per Ottici e Programmi Gratuiti su:
http://www.nicolaottomano.it
Sinapsi Antispam. Antispam Gratuito.
http://www.sinapsi-antispam.tk
http://www.nicolaottomano.it/sinapsi.htm
Ingrosso Orologi.
http://www.supertop.it
email spamtrap: 
spam...@nicolaottomano.it

L'unica che mi viene in mente è che se aspetto un po' prima di mandarli, 
il programma che riceve ha tutto il tempo di gestire i dati arrivati e 
quindi prepararsi per accogliere altri dati.
Se invece spedisci immediatamente allora dall'altra parte il flusso 
sembra unico mentre in realtà ci vorrebbe un modo per indicare quando è 
finito un pacchetto e quando ne sta iniziando un altro.
Ma trasmetti stringhe o dati binari?
Se trasmetti stringhe prova ad utilizzare un qualche separatore (vbCrLf 
o vbLf o vbCr o vbTab ecc. ecc.).
-- 
Quando noi ignoranti eravamo di più, tutto era più bello...
(A. Celentano)
Per rispondermi in privato, togli prima l'immondizia dalla testa ;)

 Una implementazione la trovi su 
http://www.vbsimple.net/cliserv/clser_06.htm
Cavolo sai che non conoscevo questa protezione del TCP/IP! Devo studiare meglio!
Cmq credo che sia il mio caso.
Per 'aggirare' l'ostacolo ho messo un ritardo ottimizzato (usando 
l'MsgWaitMultipleObjects) prima di generare all'esterno l'evento SendComplete...che 
praticamente è circa quello che fa Fibia nell'esempio.
Tnx a lot!
LeleB.