03. april 2006 - 14:45Der er
5 kommentarer og 1 løsning
Fejl ved sending/modtagelse af data fra Winsock komponent
Goddag. Min ven og jeg er i forbindelse med et projekt på skolen i Visual Basic 6 igang med at programmere et Tegn og gæt spil som fungerer over netværk vha. Winsock komponenter.
Vi har en PictureBox, og så er der en klient der tegner, og vi skulle gerne have overført det som bliver tegnet over til den klient som skal gætte.
Det gør vi via en Winsock komponent hvor vi sender X og Y koordinaterne når der enten klikkes (for at definere hvor tegningen starter) eller når musen bevæges og museknappen er nede (for at sende koordinaterne for hvad brugeren tegner).
Koordinaterne sendes i formatet: Xkoordinat:Ykoordinat, eksempel: 1234:5678.
Det sker med følgende kode:
Private Sub pctTegning_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) pctTegning.CurrentX = X pctTegning.CurrentY = Y sckTegn.SendData X & ":" & Y End Sub
Private Sub pctTegning_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 1 And sckTegn.State = 7 Then pctTegning.Line -(X, Y) sckTegn.SendData X & ":" & Y End If End Sub
Klienten som skal gætte hvad der tegnes modtager nu koordinatsættene med følgende kode:
Private Sub sckTegn_DataArrival(ByVal bytesTotal As Long) Dim IncomeData As String Dim Koords sckTegn.GetData IncomeData Koords = Split(IncomeData, ":") X = CSng(Koords(0)) Y = CSng(Koords(1)) pctTegning.Line -(X, Y) End Sub
----
Problemet består nu i, at IncomeData ved sckTegn_DataArrival bliver "stacked" oven i hindanden, og IncomeData bliver ikke "tømt" hver gang. For eksempel resulterer IncomeData i at se således ud: 1234:56781234:56781234:56781234:5678, osv...
Det er det vi ikke forstår hvorfor den gør, da den skulle blive clearet hver gang. Vi har også prøvet at tilføje IncomeData = "" til sidst, for at tømme den.
Jeg håber virkelig at nogen kan hjælpe, har haft dette problem i 3 uger nu, og skal aflevere om 3 uger, så det haster lidt :)
Det kunne godt være Split() som ikke er hurtig nok til at opdele data.. prøv med lidt api..
' ---------------------- API ---------------------- ' Denne stump i toppen.. (på jeres Form og i bægge project'er) Private Type POINTAPI X As Long Y As Long End Type
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long) ' ---------------------- API ----------------------
' Her er så den nye kode til det..
Private Sub pctTegning_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) Dim pt As POINTAPI Dim bData(7) As Byte pctTegning.CurrentX = X pctTegning.CurrentY = Y CopyMemory bData(0), pt, 8 ' Kopier 'pt' til 'bData' sckTegn.SendData bData ' Sender 'bData' End Sub
Private Sub pctTegning_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Dim pt As POINTAPI Dim bData(7) As Byte If Button = 1 And sckTegn.State = 7 Then pctTegning.Line -(X, Y) CopyMemory bData(0), pt, 8 ' Kopier 'pt' til 'bData' sckTegn.SendData bData ' Sender 'bData' End If End Sub
Private Sub sckTegn_DataArrival(ByVal bytesTotal As Long) Dim pt As POINTAPI Dim bData(7) As Byte If bytesTotal = 8 Then sckTegn.GetData bData, vbByte, bytesTotal CopyMemory pt, bData(0), 8 ' Kopier 'bData' til 'pt' pctTegning.Line -(pt.X, pt.Y) End If End Sub
Ha ha.. skal lige ha det hele med.. de 2 her skal se sådan ud:
Private Sub pctTegning_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) Dim pt As POINTAPI Dim bData(7) As Byte pctTegning.CurrentX = X pctTegning.CurrentY = Y pt.X = X pt.Y = Y CopyMemory bData(0), pt, 8 ' Kopier 'pt' til 'bData' sckTegn.SendData bData ' Sender 'bData' End Sub
Private Sub pctTegning_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Dim pt As POINTAPI Dim bData(7) As Byte If Button = 1 And sckTegn.State = 7 Then pctTegning.Line -(X, Y) pt.X = X pt.Y = Y CopyMemory bData(0), pt, 8 ' Kopier 'pt' til 'bData' sckTegn.SendData bData ' Sender 'bData' End If End Sub
Jeg takker meget for at du gad svare. Jeg bliver nødt til at vente til imorgen med at afprøve det.
Når du snakker om API er det umiddelbart ikke noget jeg har arbejdet med før. Kræver det at jeg indsætter nogle flere komponenter på min brugergrænseflade, eller er et nok udelukkende med koden?
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.