nomore Skrevet 23. april 2005 Del Skrevet 23. april 2005 Sliter med et lite problem her. Har en linux server som står og sender ut data på en viss port så snart eg har koble til. Og det går helt smertefritt. Problemet er når eg skal motta disse dataene. Har nå prøvd på to forskjellige maskiner(begge med vb6 installert, og prosjektet kjøres via vb6), på disse to maskinene oppfører winsock controllen seg forskjellig. Eg forventer at dataene kommer inn på denne måten: felt: verdi<CRLF> felt: verdi<CRLF> felt: verdi<CRLF> <CRLF> Det går helt fint på den ene maskinen, men på den andre kommer de slik: felt: verdi<CRLF>felt: verdi<CRLF>felt : verdi<CRLF><CRLF> Og i tillegg, på den første maskinen kan eg lese et slikt datasett via getdata, men på den andre er ikke alltid alt kommet med, slik at eg kanskje må lese getdata flere ganger før eg har et datasett. Neste problem er at dette ikke alltid er tilfelle på begge maskinene. Det hender faktisk at de bytter på det, eller er like ei stund. PS: et datasett er fra første linje til første tomme linje. Når eventen for å motta data blir utløst leser eg inn dataene fra getdata inn i ei streng, for så å sende dette til en annen funksjon, ParseData, som splitter denne strengen opp i et array(med CRLF som delimiter), og deretter sjekke at hver enkelt array har de dataene de skal ha. Mistenker at eg må gjøre det på en annen måte, noen tips? Lenke til kommentar
aadnk Skrevet 23. april 2005 Del Skrevet 23. april 2005 Problemet er at du ikke kan forvente at pakkene mottatt på klientene er likeledes med den sendte på serveren - ofte deles pakker opp i flere mindre segmenter, og disse må du selv sette sammen. Heldigvis tar TCP seg av rekkefølgen av disse pakkene, hvilket betyr at følgende kode burde fungere: ' Vår buffer som lagrer informasjonen midlertidig inntil vi har mottat datasettet Dim strBuffer As String Private Sub wckClient_DataArrival(ByVal bytesTotal As Long) Dim strRecived As String, Tell As Long, aDataSet ' Motta data wckClient.GetData strRecived ' Legg til dette segmentet strBuffer = strBuffer & strRecived ' Forsikre oss mot å motta flere datasetter aDataSet = Split(strBuffer, vbCrLf & vbCrLf) ' Finn så endelig ut om vi har mottat hele datasettet If UBound(aDataSet) > 0 Then ' Les alle datasetter som er fullførte For Tell = LBound(aDataSet) To UBound(aDataSet) - 1 ParseData aDataSet(Tell) Next ' Det siste elementet vil ALLTID være ufullendt strBuffer = aDataSet(UBound(aDataSet)) End If End Sub Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå