1 2 3 4 5 | Dim data As String Winsock.GetData(data) Receivebox.text = Receivebox.text & data & vbCrLf End Sub |
1 2 3 4 5 6 7 8 9 | Dim networkStream As Net.Sockets.NetworkStream = tcpClient.GetStream() Dim bytes(tcpClient.ReceiveBufferSize) As Byte Dim myReadBuffer(1024) As Byte Dim myCompleteMessage As System.Text.StringBuilder = New System.Text.StringBuilder() Dim numberOfBytesRead As Integer = 0 numberOfBytesRead = networkStream.Read(myReadBuffer, 0, myReadBuffer.Length) RichTextBox2.Text = RichTextBox2.Text & numberOfBytesRead.ToString End Sub |
Ik gebruik Visual Studio 2005 Express Edition met het .NET framework die je daarbij installeert.quote:Op vrijdag 27 februari 2009 23:14 schreef TallMan het volgende:
Even voor de volledigheid, welke versie .NET gebruik je ?
Dat klopt. Dat is bij deze barcodescanner ook het geval. Wanneer ik de juiste string met data verzend krijg ik als respons de gewenste data terug. Met behulp van Wireshark (een programmatje waarmee je data verkeer op je ethernet kaart monitort) zie ik dat de gewenste data ook verzonden wordt. Waarschijnlijk zit er dus iets fout in de VB code.quote:Op zondag 1 maart 2009 19:42 schreef Tuvai.net het volgende:
Als jij er 100% zeker van bent dat jou code werkt, dan zou ik de documentatie van het betreffende apparaat eens daar bij pakken. Veel hardware/apparaten waar softwarematig mee gecommuniceerd kan worden (althans waar ik mee gewerkt heb, voornamelijk modbus-pollers e.d.) hebben er een eigen beveiliging op na. Wat ik al heel vaak tegen ben gekomen bij dergelijke apparaatjes, is dat je eerst een code/commando moet sturen, alvorens je data geretourneerd kunt krijgen.
1 2 3 4 5 6 7 8 9 10 | Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim networkStream As Net.Sockets.NetworkStream = tcpClient.GetStream() If networkStream.CanWrite And networkStream.CanRead Then ' Do a simple write. Dim sendBytes As [Byte]() = System.Text.Encoding.ASCII.GetBytes(TextBox1.Text) networkStream.Write(sendBytes, 0, sendBytes.Length) RichTextBox1.Text = RichTextBox1.Text & TextBox1.Text End If End Sub |
Dan zou ik toch denken non-blockingquote:This method reads data into the buffer parameter and returns the number of bytes successfully read. If no data is available for reading, the Read method returns 0.
Toch maar even naar de DataAvailable property van je networkstream kijken, eventueel icm een timertje om em op je scherm te updaten.quote:Use the Write and Read methods for simple single thread synchronous blocking I/O.
1 2 3 4 5 6 7 8 9 10 11 12 13 | If tcpClient.Connected = True Then Dim networkStream As Net.Sockets.NetworkStream = tcpClient.GetStream() If networkStream.DataAvailable = True Then 'RECEIVE Dim size As Integer = 32 Dim mycompletemessage As System.Text.StringBuilder = New System.Text.StringBuilder() myCompleteMessage.AppendFormat("{0}", Encoding.ASCII.GetString(myReadBuffer, 0, numberOfBytesRead)) numberOfBytesRead = networkStream.Read(myReadBuffer, 0, size) RichTextBox2.Text = mycompletemessage.ToString & vbCrLf & RichTextBox2.Text End If End If End Sub |
haha, dat had ik niet in de gaten.quote:Op maandag 2 maart 2009 12:23 schreef TallMan het volgende:
Euh, misschien door te readen voordat je je data in je stringbuilder gaat flikkeren (regeltje 9 naar voor regeltje 8)
Lijkt me toch vrij elementair
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | Connectie("10.0.10.99", 10000) End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Disconnect() End Sub Function Connectie(ByVal ip As String, ByVal poort As Integer) Try tcpClient.Connect(ip, poort) Catch Exception1 As Net.Sockets.SocketException tcpClient.Close() MessageBox.Show("Error 1: " & Exception1.Message) Catch Exception2 As ObjectDisposedException tcpClient.Close() MessageBox.Show("Error 2: " & Exception2.Message) Catch Exception3 As NullReferenceException tcpClient.Close() MessageBox.Show("Error 3: " & Exception3.Message) End Try End Function Function Disconnect() Try tcpClient.Close() Catch Exception1 As Net.Sockets.SocketException MessageBox.Show("Error 4: " & Exception1.Message) Catch Exception2 As ObjectDisposedException MessageBox.Show("Error 5: " & Exception2.Message) Catch Exception3 As NullReferenceException MessageBox.Show("Error 6: " & Exception3.Message) End Try End Function |
1 |
Sorry, maar ik begrijp niet wat je probeert te vertellen.quote:Op woensdag 11 maart 2009 13:02 schreef TallMan het volgende:
je tcpclient, waar wordt die gezet, het probleem zal in de lifetime van dat object zitten dus alle News en Set Nothing van dat ding eens tracen.
Hij bedoelt jouw tcpclient object. Waar wordt die aangemaakt en wat gebeurt daar in de levensduur van jouw applicatie mee? Doe je op 'het eind' van jouw applicatie wel netjes alles afsluiten wat 'open' staat?quote:Op woensdag 11 maart 2009 13:18 schreef toma het volgende:
[..]
Sorry, maar ik begrijp niet wat je probeert te vertellen.
Misschien dat je een voorbeeld kunt geven.
Ik declareer mijn tcpclient aan het begin van het programma als je dat soms bedoeld.quote:Op woensdag 11 maart 2009 13:24 schreef Tuvai.net het volgende:
[..]
Hij bedoelt jouw tcpclient object. Waar wordt die aangemaakt en wat gebeurt daar in de levensduur van jouw applicatie mee? Doe je op 'het eind' van jouw applicatie wel netjes alles afsluiten wat 'open' staat?
1 |
|
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |