hallo, ik heb een projectje op school lopen om door middel van VB6.0 een k8055 velleman kaartje aan te sturen, het zou als volgt moeten gaan, een verbinding tussen 2 pc's die in verbinding staan via lan en door middel van een VB progje onderling data versturen en zo de k8055 aansturen. het probleem is als ik data verstuur via winsock dan wordt het te veel data om in 1 winsock te verwerken, is het mogelijk om winsock in aparte groepen te verdelen zodat elk onderdeel zijn eigen winsock heeft?
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
als ik data verstuur via winsock dan wordt het te veel data om in 1 winsock te verwerken
???
Winsock is een gewoon een protocol. Je kunt er zoveel data mee versturen als je wilt...
welja, zal mijn probleem verduidelijken
(server)
Private Sub sockMain_ConnectionRequest(Index As Integer, ByVal requestID As Long)
intSockCnt = intSockCnt + 1
Load sockmain(intSockCnt)
sockmain(intSockCnt).Accept requestID
Text3 = Text3 & _
"Connected to: " & _
sockmain(intSockCnt).RemoteHostIP & vbCrLf
End Sub
Private Sub cmdlisten_Click()
sockmain(0).Close
sockmain(0).LocalPort = txtport.Text 'connect aan port in textveld gegeven
sockmain(0).Listen
End Sub
Private Sub sockmain_DataArrival(Index As Integer, ByVal bytesTotal As Long)
Dim indata As String
sockmain(Index).GetData indata
Text1.Text = Text1.Text & indata
End Sub
(client)
Private Sub Check1_Click(Index As Integer)
If Check1(0).Value = 1 Then
sockmain.SendData "1aan"
Else
sockmain.SendData "1uit"
End If
If Check1(1).Value = 1 Then
sockmain.SendData "2aan"
Else
sockmain.SendData "2uit"
End If
If Check1(2).Value = 1 Then
sockmain.SendData "3aan"
Else
sockmain.SendData "3uit"
End If
End Sub
Private Sub cmdConnect_Click()
sockmain.RemoteHost = txthost.Text 'hier zet je ip in om aan te connecten
sockmain.RemotePort = txtport.Text 'hier zet je port in om aan te connecten
sockmain.Connect 'connect
End Sub
Private Sub Form_Load()
server.Show
End Sub
het probleem is als ik een checkbox aanklik bijvoorbeeld check1(0) dan ontvangt mijn winsock: "1aan2uit3uit"
is er een manier zodat check1(0) alleen stuurt "1aan" ?
ik denk dat ik ergens fout gegaan ben bij het if statement gebruik maar weet niet waar, ben namelijk nieuw als VB6.0 gebruiker..
bedankt voor hulp
-jasper
Je kunt dan het verzenden van check 2 en 3 beter in de eventhandler van check 2 en 3 kunnen zetten.
Dus onder Check2_Click
If Check1(1).Value = 1 Then
sockmain.SendData "2aan"
Else
sockmain.SendData "2uit"
End If
en hetzelfde voor Check3
De subroutine
Private Sub Check1_Click(Index As Integer)
Word aan geroepen ,en in Index staat een getal
Welke check button je net aan geklikt hebt
Daar om is het array , een gehele collectie checksum vinkjes
Dus al je op checksum 1 of 2 klikt word dezelfde routine aan geroepen
Alleen het index getal veranderd ( dat wat tussen haakjes staat !!!!!_
Dus zou je kunnen zeggen in de subroutine
Private Sub Check1_Click(Index As Integer)
Dim DataToSend as string ( tijdenlijke tekst string)
DataToSend=Str$(index) 'alvast nummer er in zetten
If Check1(index).Value = 1 Then
DataToSend= DataToSend & ", Aan,"
Else
DataToSend= DataToSend & ", Uit,"
End if
sockmain.SendData DataToSend 'en nu string versturen
end sub
Je verstuur nu alleen de wijzigingen
Als je komma's er in zet kan je ze aan de ontvanger kant correct proberen te lezen
Data komt normaal gesproken goed binnen .... Maar jij moet voor correct uitlezen zorgen
Zo en nu mag jij verder denken 
Private Sub Check1_Click(Index As Integer) Dim DataToSend as string ( tijdenlijke tekst string) DataToSend=Str$(index) 'alvast nummer er in zetten If Check1(index).Value = 1 Then DataToSend= DataToSend & ", Aan," Else DataToSend= DataToSend & ", Uit," End if sockmain.SendData DataToSend 'en nu string versturen end subJe verstuur nu alleen de wijzigingen
Als je komma's er in zet kan je ze aan de ontvanger kant correct proberen te lezen
Data komt normaal gesproken goed binnen .... Maar jij moet voor correct uitlezen zorgenZo en nu mag jij verder denken
hmm ok ik probeer ontvanger in te stellen zoals ervoor maar reageert niet op de binnengekomen data
Private Sub sockmain_DataArrival(Index As Integer, ByVal bytesTotal As Long)
Dim indata As String
sockmain(Index).GetData indata
If Left$(indata, 7) = "0, Aan," Then
Check1(0).Value = 1
End If
If Left$(indata, 7) = "0, Uit," Then
Check1(0).Value = 0
End If
If Left$(indata, 7) = "1, aan," Then
Check1(1).Value = 1
End If
If Left$(indata, 7) = "1, uit," Then
Check1(1).Value = 0
End If
If Left$(indata, 7) = "2, aan," Then
Check1(2).Value = 1
End If
If Left$(indata, 7) = "2, uit," Then
Check1(2).Value = 0
End If
Text1.Text = Text1.Text & indata
End Sub
wss omdat je nu Strings verstuurt moet ik het lezen van binnenkomende data veranderen..
[Bericht gewijzigd door jasperno op (39%)]
Ik doe het nu even met droog zwemmen .. heb hier geen vb5/6 draaien
Data die binnen komt
KAN als losse byte binnen komen !!!!! dan wel opgebroken in stukjes
Dus niet een gehele string kontroleren
Zet eerst in buffer en probeer buffer te lezen
Steeds een positie verder in de buffer als start positie
Dit is boven staand is heel belangrijk
Dus als je toevoegt bij het zenden "Comm,"
Ziet je regel er zo uit
Comm, 1, Aan,
DataToSend=Str$(index) 'alvast nummer er in zetten
Word dan
DataToSend= "Comm," & Str$(index)
Dus data die binnen komt via
Private Sub sockmain_DataArrival(Index As Integer, ByVal bytesTotal As Long)
Dim strData As string
sockMain.getdata strdata, vbstring
Buffer=Buffer & strData
Als je een start positie heb gevonden dan ga je bereken of je voldoende byts binnen heb gehad
Dus als je commando + info is bv lengte 13
Als de buffer lengte <13 heb doe niets
Als buffer >=13 dan probeer je het commando te vinden
Dus in een LOOP tot dat je ...
bereken (start positie+ lengte commando+lengte instructie)- lengte buffer is kleiner is dan 13
dan kan er geen commando meer staan
als je een correct commando heb gevonden moet je wel de buffer leegmaken
let op alles voor het laatste character moet je verwijderen uit de buffer
om data op scherm te zien welke binnen komt in txtStatus.Text ( multi line )
Dim strData As String
sockMain.GetData strData, vbString
txtStatus.Text = txtStatus.Text & _
strData & vbCrLf
Nu weet je het meest belangrijke zorg dat je dingen op je scherm kan zien !!!
Wel zo makkenlijk
En wat je send of ontvangt zijn altijd bytes ...
en het is wel makkenlijk om voor de mens leesbare tekens te gebruiken, kan je op het scherm zien wat in de buffer staat 
Maar jij verstuur in het oude voorbeeld ook leesbare tekst(strings)
En google zat voorbeelden te vinden
ok, ziet er ingewikkeld uit, zal een paar voorbeelden proberne zoekn via google, eerste keer dat ik hoor van het gebruik van buffers
nog eens bedankt, laat nog wel x van me horen 
[Bericht gewijzigd door Henry S. op (85%)]
Even te verduidelijking
Die Index in bv
Private Sub sockmain_DataArrival(Index As Integer, ByVal bytesTotal As Long)
Private Sub Check1_Click(Index As Integer)
Zijn waardes die op dat ogenblik in die subroutine gemaakt worden voor intern gebruik in die sub !!!!!
Dus tijdelijk waardes
En zullen niet over gestuurd worden via wat dan ook ..
Tenzij JIJ die waardes bewust overstuurd ( zoals in mijn voorbeeld)
Gebruik van buffers
Zeker bij serial lijnen maar ook bij sockets
Die sockets pakketjes zijn max iets van 1560 byts lang
Dus kunnen worden opgebroken in stukjes ( zelfs door een netwerkswits)
Zelfs Windows kan wel eens gek doen met interrups en daardoor de boel opbreken
Meestal werkt een socket correct ..maar weest voorzichtig en pas "goede" technieken toe
En laat je data op het scherm zien dan weet je wat je doet
[Bericht gewijzigd door Henry S. op (33%)]
Op 2 maart 2009 19:32:10 schreef x21r:
Gebruik van buffers
Zeker bij serial lijnen maar ook bij sockets
Die sockets pakketjes zijn max iets van 1560 byts lang
Dus kunnen worden opgebroken in stukjes ( zelfs door een netwerkswits)
Zelfs Windows kan wel eens gek doen met interrups en daardoor de boel opbrekenMeestal werkt een socket correct ..maar weest voorzichtig en pas "goede" technieken toe
En laat je data op het scherm zien dan weet je wat je doet
ok data laat ik al op scherm zien, als je eventueel eens tijd hebt zou je eens kunnen tonen hoe je precies zo een buffer onderzoekt bij binnenkomende data, ga nog even zoeken op google thx again 
ok heb al iets gevonden een begin om de bufefr te checken op bepaalde characters
Private Sub sockmain_DataArrival(Index As Integer, ByVal bytesTotal As Long)
Dim strData As String
sockmain(Index).GetData strData, vbString
txtstatus.Text = txtstatus.Text & _
strData & vbCrLf
buffer = buffer & strData
If InStr(strData, "0") Then
MsgBox "0 gevonden"
Else
MsgBox "niks gevonden"
End If
End Subhij blijkt alleen de (index) te vinden die word doorgestuurd namelijk "0","1" en "2" de ", aan," of ", uit," komt wel tevoorschijn in mijn txtstatus.text maar vind em niet in buffer :s
ok edit, heb het al deel opgelost als ik zocht naar 0, aan, vond ie geen letters, heb dus alles veranderd naar cijfers nu is het
Dim strData As String
sockmain(Index).GetData strData, vbString
txtstatus.Text = txtstatus.Text & _
strData & vbCrLf
buffer = buffer & strData
If InStr(strData, "0,1,") Then
MsgBox "0,1, gevonden"
Else
MsgBox "niks gevonden"
End If
End Sub
cijfers vind ie blijkbaar wel 
[Bericht gewijzigd door Henry S. op (42%)]
free_electron
Silicon Member
Professioneel ElectronenTemmer - siliconvalleygarage.com - De voltooid verleden tijd van 'halfgeleider' is 'zand' ... US 8,032,693 / US 7,714,746 / US 7,355,303 / US 7,098,557 / US 6,762,632 / EP 1804159 - Real programmers write Hex into ROM
ga bij elketuur de voorbeeldfiles halen van het het boek 'Visual Basic for electronics engineering'. der zit een complete IP engine in. ( server en slave. de server kan zelfs meerdere concurrent connecties verwerken)
vergeet niet je postie
Locate text inside a string
position = InStr("avbprogram", "vb") ' Returns 2position = InStr("avbprogramvb", "vb") ' Also returns 2Locate the first character in a string
position = InStr("avbprogram", "v") ' Returns 2
en dan steeds verder zoeken in je buffer
Henry S.
Moderator
Confucius says chà bù duo. Deze post is niet door ChatGPT gegenereerd. De 2019 CO labvoeding.
Een edit is geen topickick. Lees http://www.circuitsonline.net/forum/faq#replys en http://www.circuitsonline.net/forum/faq#topickicks eens goed door.
Dat geldt ook voor x21r
zal er op letten sorrie ben neiuw op dit forum, verwijder anders de reply's die als edit bedoelt waren..
mvg jasper
[Bericht gewijzigd door Henry S. op (54%)]
ok wat ik nu doe is vscroll.values doorsturen.
Private Sub VScroll1_Change(index As Integer)
Dim DataToSend As String 'tijdenlijke tekst string
DataToSend = "vscroll" 'alvast nummer er in zetten
If VScroll1(index).Value >= 1 Then
DataToSend = DataToSend & VScroll1(0).Value
Else
DataToSend = DataToSend & VScroll1(0).Value
End If
sockmain.SendData DataToSend 'en nu string versturen
Label3.Caption = VScroll1(0).Value
End Sub
wat ik ontvang= vscroll en dan nmmer van 0 tot 255 bv"vscroll37" is het mogelijk ietste doen zoals,
if left$(strdata, 7) = "vscroll" then
instr(strdata) = vscroll1.valueweet het niet echt..
[Bericht gewijzigd door jasperno op (83%)]
Laat ik twee dingen zeggen
Eerst
Laat ik je een beetje op weg helpen,er is een functie Mid$(x,y,$)
In welke je een gedeelte ( dus allen de cijfers)kopieert
En deze kan je weer terug zetten naar een waarde
Gebruik de postie waarde van InStr() als start+command lengte "VSroll"
Nu is het handig als je het getal 1 verstuurd als 001
Dus 3 cijfers er van maakt ,zie FORMAT comando in vb
En als je zoekt in google zet pagina's in Nederland aan
Tweede
In de faq staat elektronica .
Dus GEEN software
Waarom deze dan getolereerd word ?
Waarschijnlijk omdat je de k8055 er me aanstuurt ?
Zodra je een foto maakt van de print ben je weer welkom
En als je behalve een aan uit ook een BlowUp / Rook functie maakt
Ben je weer welkom ........in het goede topic !
Begrijp ik uit oa de faq en topics commentaren
Henry S.
Moderator
Confucius says chà bù duo. Deze post is niet door ChatGPT gegenereerd. De 2019 CO labvoeding.
Op 3 maart 2009 17:23:41 schreef x21r:
Tweede
In de faq staat elektronica .
Dus GEEN software
Waarom deze dan getolereerd word ?
Waarschijnlijk omdat je de k8055 er me aanstuurt ?
Je stuurt elektronica aan, en een heleboel elektronica draait niet zonder soft/firmware.
Ook gebruik je voor de ontwikkeling vaak software.
dus even verder nadenken 
Zodra je een foto maakt van de print ben je weer welkom
En als je behalve een aan uit ook een BlowUp / Rook functie maakt
Ben je weer welkom ........in het goede topic !
Begrijp ik uit oa de faq en topics commentaren
We gaan toch niet een potje zagen? Wat je nu post slaat nergens op.
had al oplossing gevonden met mid command, waarom zou ik foto van m'n print moeten maken, je vind er genoeg op google, bedankt voor alle hulp alvast programma is bijna klaar laat het einderesultaat nog wel eens zien