Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2001
    Messaggi
    36

    WinSock[ VB6] (Trasmissione dati)

    Ciao a tutti ho un piccolo problemino!!
    Per necessità ho realizzato un Server e un Client che comunicano tra di loro tramite winsock e i due comunicano correttamente.
    Io ho delle procedure in cui ci sono delle SendData molto ravvicinate come da esempio qui sotto


    Wins.SendData "3#" & NomeTabella & "¼" & CStr(rs.RecordCount) & "^"
    Text1.Text = Text1.Text + "Sto Aggiornando la tabella: " + NomeTabella
    .
    .
    . ALTRO CODICE
    .
    .
    NomeTabella + Chr(13) + Chr(10)
    Wins.SendData "2#" & sRecord & "½" & NomeTabella & "¼"


    Il server quando nell' evento Wins_DataArrival riceve i dati mi UNISCE i due messaggi ricevuti (Quelli in rosso) e per la situazione che sto trattando io non mi va bene.
    Quello che interessa a me e che per ognuno dei due messaggi l'evento Wins_DataArrival venga attivato due volte!!!!

    Grazie a tutti per l'aiuto

  2. #2
    Io ho risolto il problema
    in una maniera molto complicata ma efficace
    preparando il pacchetto da inviare tramite winsock inviando ad esempio prima la lunghezza del pacchetto e alla fine dell'invio del pacchetto aspetto che l'altro notifichi l'avvenuta ricezione. non so se come idea può servirti
    *** Rachele TI AMO DA MORIRE!!! ***

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2001
    Messaggi
    36
    E' come se che essendo troppo ravvicinati non riusciesce a vederli separatamente, ma esiste in Vb un metodo per dire Fermati per tot millisecondi senza usare un timer??? Tipo sleep 1000

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    23
    Ciao Fanboy,

    io ho lo stesso identico problema, quando invio dei messaggi al client a volte arrivano doppi,tripli,quadrupli.... a volte anche decuplicati volte. Ho provato con un doevent o utilizzando una API che blocca l'invio per un secondo ma niente da fare, possibile che il winsock gestisca cosi male l'invio di un dato?
    Rimango anch'io in attesa di sviluppi, se vuoi ti invio l'API per lo sleep(millisecondi)

    ciao
    Pere che'l pompermo feccia mele!!

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    23
    comunque ho notato che (nel mio caso) non è l'applicazione ricevente che unisce i pacchetti ma è l'applicazione che invia i pacchetti che li unisce in un unico invio.....
    Pere che'l pompermo feccia mele!!

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2001
    Messaggi
    36
    Ciao Franzzz ehh le ho provate tutte anch'io !!!Ho messo un milione di DoEvents ma nn ci sono santi. Oggi in macchina ho congetturato che la soluzione migliore per il mio problema è generare un file txt contenente i dati che devo aggiornare e spedirli via tramite Winsock al server. Infatti mi calza a pennello il tuo intervento qualche Tread sotto a questo in cui si parla di trasferire file traminte WS.


    Ciao

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2001
    Messaggi
    36
    Ahh Franzzz avevo provato a utilizzare il protocollo udp invece che il tcp/ip che ha un metodo di connessione al server un po' differente.


    PARTE CLIENT

    Wins.Protocol = sckTCPProtocol
    Wins.RemotePort = 1012
    Wins.Bind 1013
    Wins.RemoteHost = IPSERVER
    Wins.SendData "MEssaggio da spedire al server"


    PARTE SERVER

    Wins.Protocol = sckTCPProtocol
    Wins.RemotePort = 1013
    Wins.Bind 1012
    Wins.RemoteHost = IPCLIENT
    Wins.SendData "Messaggio da spedire al CLient"

    A differenza del TCP/IP non usi solo una porta su cui vengono immessi/ricevuti i dati ma bensì due. Questo migliora decisamente il problema che abbiamo entrambi.Lo svantaggio è che L'UDP è un protocollo meno sicuro del TCP/IP

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    23
    Grazie, ma L'UDP mi è stato vivamente sconsigliato in quanto puo' causare la perdita di alcuni pacchetti nel trasferimento dei files. Non ho ancora trovato la soluzione, in compenso su numerosi forum ho visto che sono in parecchi ad avere questo problema. Se trovo la soluzione ti faccio sapere,

    Pere che'l pompermo feccia mele!!

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2001
    Messaggi
    36
    Prova a visionare il codice relativo al trasferimento dati su questo sito http://www.vbsimple.net/index.htm?/cliserv/ . Io l'ho provato e devo dire che sembra funzionare decisamente bene. Provalo e poi fammi sapere che ne pensi

  10. #10
    Utente di HTML.it L'avatar di macse
    Registrato dal
    Dec 2002
    Messaggi
    138
    Il winsock se viene attivato il send data in tempi molto ravvicinati bufferizza tutto e spedisce un solo pacchetto.
    Hai due soluzioni :
    usi la Sleep(API) e la imposti a 200 ms ( + o meno )
    oppure molto + semplice inserisci in testa a tutti i messaggi un carattere di fine stringa (precedente es. "#") e all'arrivo dei dati al client controlli se sono presenti + di un "#" e in questo caso splitti la stringa e ti ritrovi con tutte le tue stringhe separate e pronte all'uso...

    Macse

    NB
    Visto che usi già il "#" nella stringa utilizza ad esempio "$" o una serie di caratteri ... vedi un po' te ....

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.