abonnement Unibet Coolblue Bitvavo
pi_66509106
Ik ben bezig een connectie op te zetten tussen mijn PC en een ander apparaat dmv VB.NET met een Winsock tool via Ethernet. Deze Winsock tool is een standaard tooltje van VB.

Dit werkt helemaal geweldig, alleen kan ik geen data ontvangen van dat apparaat. Ik gebruik het commando GetData(). In dit commando moet ik drie parameters zetten: 'data', 'vbtype' en 'maxlen'. In de parameter 'data' wordt de data weggeschreven die afkomstig is van het andere apparaat.

Het probleem is dat ik zeker weet dat er data verzonden wordt, maar het komt niet aan!

Code:
1
2
3
4
5
Private Sub Winsock_OnDataArrival(Byval sender as Object, Byval e As AxOSWinsckControl.__Winsock_OnDataArrivalEvent) Handles Winsock.OnDataArrival
Dim data As String
Winsock.GetData(data)
Receivebox.text = Receivebox.text & data & vbCrLf
End Sub
Overigens weet ik zeker dat de connectie goed ingesteld wordt want ik kan wel data zenden. Ik zie ook dat er data wordt ontvangen, alleen ik zie niet welke omdat 'data' geen waarde krijgt toegeschreven door de GetData() functie.
  vrijdag 27 februari 2009 @ 11:36:53 #2
44920 TallMan
Permanent brain failure
pi_66513532
Je weet zeker dat je winsock control goed werkt ? Als ik op google zoek op AxOSWinsckControl.__Winsock_OnDataArrivalEvent (datatype van een van je params) kom ik alleen dit topic tegen terwijl ik dan stiekem toch zou verwachten iets meer tegen te komen.

Kwa code lijkt het nogal op het ostrosoft winsock component, daarvoor staat sample code op de website, kun je die niet gebruiken om met je apparaat te communiceren ?

Werkt het nog niet, waarom dan niet eens proberen met de system.net.sockets namespace ?

Is de klassenaam van je winsock control ook Winsock ? het is meestal iets verhelderender om je objecten een andere naam te geven dan de klasses
geheelonthouder met geheugenverlies
Mensen die zeggen dat domme vragen niet bestaan stellen ze zelf.
pi_66513748
Ja ik weet 100% zeker dat de communicatie goed werkt. Ik heb namelijk een industriële barcodescanner via ethernet aan m'n pc hangen. Deze kan ik aansturen dmv Winsock commando's. Alleen wanneer de barcode scanner gegevens terug stuurt krijg ik deze niet binnen. Terwijl hij wel een melding geeft dat er data is binnengekomen.

Ik gebruik ook Wireshark om pakketten te onderscheppen. Ik zie ook dat de barcodescanner gegevens terug stuurt, maar deze data wordt niet in mijn variabel geschreven.

Maar hoe werkt dat system.net.sockets namespace dan?
  vrijdag 27 februari 2009 @ 12:30:03 #4
44920 TallMan
Permanent brain failure
pi_66515313
Heb je de help mee geinstalleerd ? Daar staat een hoop in. Ook een snelle google geeft je meerdere samples.

Als je specifieke vragen hebt gooi ze maar hier neer, dan zie ik het wel weer in myAT.
geheelonthouder met geheugenverlies
Mensen die zeggen dat domme vragen niet bestaan stellen ze zelf.
pi_66515358
bedankt.
pi_66525113
Ik ben nu bezig met de system.net.sockets. Er kan nu vlekkeloos een connectie opgezet worden en het zenden van data gaat ook goed. Maar het ontvangen gaat nog niet vlekkeloos.

Als ik om Button3 klik moet hij data gaan ontvangen.
1
2
3
4
5
6
7
8
9
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        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
Maar bij regel 7 gaat het mis. Want als ik op de knop klik loopt het programma helemaal vast. Als ik deze regel eruit haal dan is er niks aan de hand. Maar dan ontvangt hij ook geen data.
  vrijdag 27 februari 2009 @ 23:14:33 #7
44920 TallMan
Permanent brain failure
pi_66539586
Even voor de volledigheid, welke versie .NET gebruik je ?
geheelonthouder met geheugenverlies
Mensen die zeggen dat domme vragen niet bestaan stellen ze zelf.
pi_66539758
quote:
Op vrijdag 27 februari 2009 23:14 schreef TallMan het volgende:
Even voor de volledigheid, welke versie .NET gebruik je ?
Ik gebruik Visual Studio 2005 Express Edition met het .NET framework die je daarbij installeert.
  zaterdag 28 februari 2009 @ 01:41:42 #9
44920 TallMan
Permanent brain failure
pi_66543237
Durf zo niet te zeggen waarom je hangt op die regel, de read is nonblocking en als er geen data is zou je meteen een 0 retour moeten krijgen.

Ik heb zelf dmv de Socket klass gebruikt gemaakt van de namespace, op de socket klasse heb ik de Receive method gebruit.

Maar iets zegt me dat als je read call blockt dat er toch iets anders niet lekker zit. Drivers van je netcard updaten misschien.

Je zou met een chat serverChat server/client[/url] eens kunnen kijken of je uberhaupt iets door de sockets heenkrijgt.
geheelonthouder met geheugenverlies
Mensen die zeggen dat domme vragen niet bestaan stellen ze zelf.
pi_66591814
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.
pi_66594988
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.
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.
Het nadeel is dat de documentatie bij deze barcodescanner zeer minimaal is, vooral wat betreft de communicatie via ethernet.
  maandag 2 maart 2009 @ 00:19:49 #12
44920 TallMan
Permanent brain failure
pi_66603078
Ik mag aannemen dat de networkStream die je van je tcpClient afhaalt dezelfde networkstream is waarmee je je data verstuurt ?
geheelonthouder met geheugenverlies
Mensen die zeggen dat domme vragen niet bestaan stellen ze zelf.
pi_66606029
Om data te versturen gebruik ik deze code:
1
2
3
4
5
6
7
8
9
10
'SEND
    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

ik gebruik overigens niet de 2005 versie maar de 2008 express edition.
  maandag 2 maart 2009 @ 08:43:17 #14
44920 TallMan
Permanent brain failure
pi_66606290
Lekker handig overigens: MSDN over de Read method:
quote:
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.
Dan zou ik toch denken non-blocking

Kijk ik echter naar de NetworkStream en dan zie je
quote:
Use the Write and Read methods for simple single thread synchronous blocking I/O.
Toch maar even naar de DataAvailable property van je networkstream kijken, eventueel icm een timertje om em op je scherm te updaten.
geheelonthouder met geheugenverlies
Mensen die zeggen dat domme vragen niet bestaan stellen ze zelf.
pi_66608148
Het is inmiddels gelukt!
1
2
3
4
5
6
7
8
9
10
11
12
13
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        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
De code staat nu in een timer zodat hij constant de data uitleest.
  maandag 2 maart 2009 @ 10:25:57 #16
44920 TallMan
Permanent brain failure
pi_66608669
Je weet dat je je myReadBuffer displayed voor je hem toevoegt aan je richedit waardoor je effectief 1x data achterloopt.

Eerste keer schrijf je niets in je textbox want myReadBuffer is leeg
Dan vul je je myReadBuffer
Tweede keer schrijf je je data van de eerste leesactie in je textbox
en dan lees je de 2de string in.
geheelonthouder met geheugenverlies
Mensen die zeggen dat domme vragen niet bestaan stellen ze zelf.
pi_66610408
En hoe zou ik dat kunnen veranderen ?
  maandag 2 maart 2009 @ 12:23:35 #18
44920 TallMan
Permanent brain failure
pi_66612531
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
geheelonthouder met geheugenverlies
Mensen die zeggen dat domme vragen niet bestaan stellen ze zelf.
pi_66615526
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
haha, dat had ik niet in de gaten.
bedankt voor de hulp, ik ben er uit.
  maandag 2 maart 2009 @ 14:27:56 #20
44920 TallMan
Permanent brain failure
pi_66616704
Succes ermee verder
geheelonthouder met geheugenverlies
Mensen die zeggen dat domme vragen niet bestaan stellen ze zelf.
pi_66924443
Ik heb nog een vraag. Het blijkt dat wanneer ik vaak de connectie verbreek en opnieuw opstart er een error verschijnt. Dit probeer ik op te vangen dmv Structured Exception Handling. Maar helaas werkt dit niet.

Er zijn 2 manieren om weer verbinding te krijgen met de barcodescanner en dat is door de barcodescanner handmatig te resetten (dmv een telnet commando te versturen of dmv een hardwarematige reset). Of door de VB applicatie af te sluiten en opnieuw op te starten, maar dit is niet de bedoeling.

Ik gebruik voor het eerst Exception Handling, maar dit is de code die ik heb geschreven.
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
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        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
En dit is de error die verschijnt.

Het blijkt dus dat er tijdens het connecten de volgende Exception afgehandeld dient te worden.
1        Catch Exception2 As ObjectDisposedException


Hopelijk kan iemand me helpen.

[ Bericht 0% gewijzigd door toma op 11-03-2009 13:11:34 ]
  woensdag 11 maart 2009 @ 13:02:18 #22
44920 TallMan
Permanent brain failure
pi_66931890
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.
geheelonthouder met geheugenverlies
Mensen die zeggen dat domme vragen niet bestaan stellen ze zelf.
pi_66932504
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.
Sorry, maar ik begrijp niet wat je probeert te vertellen.
Misschien dat je een voorbeeld kunt geven.
pi_66932740
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.
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?
pi_66933049
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?
Ik declareer mijn tcpclient aan het begin van het programma als je dat soms bedoeld.
1Dim tcpclient As New Net.Sockets.TcpClient
Daarna volgt de code die ik vanochtend heb gepost.

Moet ik deze tcpclient dan 'afsluiten' ? Ik snap het niet, maar dat komt ook omdat dit de eerste keer is dat ik met VB.NET werk. ;)
pi_66934867
quote:
Op woensdag 11 maart 2009 13:32 schreef toma het volgende:

[..]

Ik declareer mijn tcpclient aan het begin van het programma als je dat soms bedoeld.
[ code verwijderd ]

Daarna volgt de code die ik vanochtend heb gepost.

Moet ik deze tcpclient dan 'afsluiten' ? Ik snap het niet, maar dat komt ook omdat dit de eerste keer is dat ik met VB.NET werk.
Een tcpclient object open je altijd met [tcpclient-objectnaam].connect() en dien je weer te sluiten met [tcpclient-objectnaam].close(). Dat doe jij in je stukje code ook, echter zie ik dat jouw Close() commando plaatsvindt in Function Disconnect, die op z'n beurt weer uitgevoerd word door Button2_Click(). Wordt Button2_Click() wel áltijd uitgevoerd? Wordt de tcpclient wel geclosed als je de applicatie bijvoorbeeld gewoon 'afsluit' middels het kruisje van je venster?
pi_66935027
quote:
Op woensdag 11 maart 2009 14:24 schreef Tuvai.net het volgende:

[..]

Een tcpclient object open je altijd met [tcpclient-objectnaam].connect() en dien je weer te sluiten met [tcpclient-objectnaam].close(). Dat doe jij in je stukje code ook, echter zie ik dat jouw Close() commando plaatsvindt in Function Disconnect, die op z'n beurt weer uitgevoerd word door Button2_Click(). Wordt Button2_Click() wel áltijd uitgevoerd? Wordt de tcpclient wel geclosed als je de applicatie bijvoorbeeld gewoon 'afsluit' middels het kruisje van je venster?
Dat is niet zo zeer het probleem.
Ik zet een verbinding op dmv Button1. Daarna krijg ik constant data toegestuurd. Wanneer ik op Button2 druk moet de verbinding afgesloten worden. Het probleem is dat wanneer ik weer op Button1 druk dat ie dan de volgende foutmelding geeft:
pi_66937509
Ik heb de code aangepast.
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
Public Class Form1
    Public Client As New Net.Sockets.TcpClient
    Public Udpclient As New Net.Sockets.UdpClient

    Dim packet As String

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        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
            If Client.Connected = 0 Then
                Client.Connect(ip, poort)
                TextBox1.Text = ("Connecting")
            Else
                TextBox1.Text = ("Already Connected!")
            End If
        Catch Exception1 As Net.Sockets.SocketException
            packet = "h"
            Dim data As Byte() = System.Text.Encoding.ASCII.GetBytes(packet)
            Udpclient.Send(data, data.Length, ip, 10001)
            Udpclient.Close()
            MessageBox.Show("Error 1: " & Exception1.Message)
            TextBox1.Text = ("Error")
        Catch Exception2 As ObjectDisposedException
            Dim Client As New Net.Sockets.TcpClient
            MessageBox.Show("Error 2: " & Exception2.Message)
            TextBox1.Text = ("Error")
        Catch Exception3 As NullReferenceException
            MessageBox.Show("Error 3: " & Exception3.Message)
        End Try
    End Function

    Function Disconnect()
        Try
            Client.Close()
            TextBox1.Text = ("Disconnecting")
        Catch Exception1 As Net.Sockets.SocketException
            MessageBox.Show("Error 4: " & Exception1.Message)
            TextBox1.Text = ("Error")
        Catch Exception2 As ObjectDisposedException
            MessageBox.Show("Error 5: " & Exception2.Message)
            TextBox1.Text = ("Error")
        Catch Exception3 As NullReferenceException
            MessageBox.Show("Error 6: " & Exception3.Message)
            TextBox1.Text = ("Error")
        End Try
    End Function
End Class

Nu krijg ik de volgende foutmelding wanneer ik voor de tweede keer wil connecten.
  woensdag 11 maart 2009 @ 15:37:32 #29
44920 TallMan
Permanent brain failure
pi_66937619
Uit de help van de TcpClient
quote:
Close : Disposes this TcpClient instance without closing the underlying connection.
Dit verklaart nogal duidelijk waarom je een objectdisposedexception hebt kunnen vangen. Zeker erg onhandig omdat de connectie die er ligt naar je scanner open blijft waardoor een reconnect waarschijnlijk nogal moeilijk wordt (vaak willen dat soort apparaten maar 1 connectie accepteren)

Je TcpClient heeft een Client propertie van het type socket. Deze heeft een disconnect.

Mijn suggestie zou dan ook zijn om je Disconnect te veranderen van
1           Client.Close()

in
1           Client.Client.Disconnect()

Daarmee zeg je tegen de onderliggende socket dat de connectie afgebroken moet worden. Verder dispose je je object niet wat hergebruik nogal moeilijk maakt.

Overigens nog een tip:
ipv je exception.message en showen doe voor debuggen in ieder geval exception.ToString(), dan heb je een volledige stacktrace inclusief precies regelnummer waar je fout optrad.

[ Bericht 62% gewijzigd door TallMan op 11-03-2009 15:47:01 ]
geheelonthouder met geheugenverlies
Mensen die zeggen dat domme vragen niet bestaan stellen ze zelf.
pi_66961379
Bedankt voor de reactie, maar helaas werkt het nog niet.
Wanneer ik
1Client.Client.Disconnect(true)

of
1Client.Client.Disconnect(false)

gebruik dan krijg ik deze error:


Ik gebruik onderstaande code om te connecten:
1Client.Connect(ip, poort)

Wanneer ik deze verander in:
1Client.BeginConnect(ip, poort, callback, state)

Dan krijg ik geen error. Maar dan maakt hij ook geen verbinding meer.

Het vreemde is dat wanneer ik de VB applicatie afsluit en opnieuw opstart dat ik dan wél weer verbinding kan maken.
  donderdag 12 maart 2009 @ 10:58:45 #31
44920 TallMan
Permanent brain failure
pi_66962979
BeginConnect en zijn maatje EndConnect zijn zware overkill voor je, die maken het alleen moeilijker ipv je probleem op te lossen

Ik zou denk ik in de Connectie methode de volgende wijziging doen
1
2
3
4
5
6
            If Client.Connected = 0 Then
                Client.Connect(ip, poort)
                TextBox1.Text = ("Connecting")
            Else
                TextBox1.Text = ("Already Connected!")
            End If

naar
1
2
                Set Client = New System.Net.Sockets.TcpClient
                Client.Connect(ip, poort)
geheelonthouder met geheugenverlies
Mensen die zeggen dat domme vragen niet bestaan stellen ze zelf.
pi_66965521
Bedankt dat was het
Maar waarom moet ik die Client opnieuw declareren? Omdat het object gedisposed is?
pi_66966536
quote:
Op donderdag 12 maart 2009 12:07 schreef toma het volgende:
Bedankt dat was het
Maar waarom moet ik die Client opnieuw declareren? Omdat het object gedisposed is?
Zodra je objecten disposed, dan gooi je ze 'weg' zoals de handeling al impliceert. Het hele object wordt weggegooid en ook het geheugen dat het betreffende object in beslag nam komt weer vrij. Dit is heel belangrijk in daadwerkelijke applicaties. In bijvoorbeeld webapplicaties hoef je daar veel minder rekening te houden omdat een webpagina op de server á la minute geparsed en na het weergeven/presenteren aan de gebruiker meteen vernietigd wordt. Connecties naar apparatuur of databases werken dan weer anders. Je legt een verbinding met iets, en je webpagina/applicatie laat deze verbinding dus voor een tijdje open staan (idle) als je de verbinding niet sluit. Veel apparaten en databases vinden het op z'n beurt weer niet zo leuk om te veel openstaande verbindingen te hebben en hebben daar ook vaak een limiet aan.
  donderdag 12 maart 2009 @ 12:48:29 #34
44920 TallMan
Permanent brain failure
pi_66966850
Wat Tuvai zegt.

En schijnbaar is de TcpClient een beetje onhandig om hergebruikt te krijgen, zodra zoiets teveel moeite kost is het al snel makkelijker om een nieuwe te pakken.

Het.NET framework is wel weer zo aardig dat als jij dingen niet meer gebruikt hij het voor je opruimt. Neemt niet weg dat ik toch aanraad om netjes met je objecten om te springen, sockets/db connecties netjes disconnecten etc.

In de bovenstaande (werkende optie) maak je een nieuwe TcpClient aan die volledig vers in het geheugen komt te zitten. Het framework herkent dat jij nergens meer een verwijzing naar de oude TcpClient heeft en die ruimt het voor je op.
Niet alle talen zijn zo aaridg voor je, mocht je met C/C++ aan de slag moeten dan moet je zelf het opruimen regelen.
geheelonthouder met geheugenverlies
Mensen die zeggen dat domme vragen niet bestaan stellen ze zelf.
  donderdag 12 maart 2009 @ 14:12:19 #35
58834 Catbert
The evil HR Director.
pi_66969735
quote:
Op donderdag 12 maart 2009 12:38 schreef Tuvai.net het volgende:
Zodra je objecten disposed, dan gooi je ze 'weg' zoals de handeling al impliceert. Het hele object wordt weggegooid en ook het geheugen dat het betreffende object in beslag nam komt weer vrij. Dit is heel belangrijk in daadwerkelijke applicaties. In bijvoorbeeld webapplicaties hoef je daar veel minder rekening te houden omdat een webpagina op de server á la minute geparsed en na het weergeven/presenteren aan de gebruiker meteen vernietigd wordt.
FYI: Dat is in het geval van Asp.net en Java absoluut niet zo. Je hebt daar gewoon een application scope. Het is altijd zaak om dit soort objecten netjes op te ruimen, er is geen garantie dat de GC ze kan verwijderen, daarom hebben ze een dispose methode.
"[...] a large number of the teenagers claiming Asperger's are, in fact, merely dicks."
abonnement Unibet Coolblue Bitvavo
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')