Ik heb een client die geschreven is in VB 6 die gebruik maakt van een server in VB.NET. Nu laat ik de client de socket.state controleren voor het geval de verbinding wordt verbroken.
Op de server maak ik een Thread aan die een sub DoListen aanroept. In de DoListen wordt er een TCPListener op poort 8000 gestart. Elke keer als er een nieuwe verbinding wordt gemaakt doe ik New Client(listener.AcceptTCPListener). De socket.state van de client is dan 7 oftwel connected.
Als ik de applicatie afsluit via form_closing dan zeg ik TcpListsener.Stop() en Thread.Abort(). De client krijgt dan een socket.state 9 oftwel een error.
Nu het probleem: Als ik hetzelfde doe (TcpListener.Stop() en Thread.Abort()) in een sub die aangeroepen wordt door middel van Stop server in een menu en de applicatie blijft voor de rest aanwezig dan krijgt de client geen socket-error en denkt hij dat de server er nog steeds is.
Ik wil graag de server kunnen stoppen met meldingen bij de clients zonder het gehele programma af te sluiten.
Op de server maak ik een Thread aan die een sub DoListen aanroept. In de DoListen wordt er een TCPListener op poort 8000 gestart. Elke keer als er een nieuwe verbinding wordt gemaakt doe ik New Client(listener.AcceptTCPListener). De socket.state van de client is dan 7 oftwel connected.
Als ik de applicatie afsluit via form_closing dan zeg ik TcpListsener.Stop() en Thread.Abort(). De client krijgt dan een socket.state 9 oftwel een error.
Nu het probleem: Als ik hetzelfde doe (TcpListener.Stop() en Thread.Abort()) in een sub die aangeroepen wordt door middel van Stop server in een menu en de applicatie blijft voor de rest aanwezig dan krijgt de client geen socket-error en denkt hij dat de server er nog steeds is.
Ik wil graag de server kunnen stoppen met meldingen bij de clients zonder het gehele programma af te sluiten.
code:
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
| << Server starten: >>
Private Sub MenuItem2_Click(.....) Handles MenuItem2.Click
mobjThread = New Thread(AddressOf DoListen)
mobjThread.Start()
End Sub
Private Sub DoListen()
mobjListener = New TcpListener(8000)
mobjListener.Start()
Do
Dim x As New Client(mobjListener.AcceptTcpClient)
Loop Until False
End Sub
<< Afsluiten gehele applicatie: >>
Private Sub frmMain_Closing(......) Handles MyBase.Load
If Not (mobjListener Is Nothing) Then
mobjListener.Stop()
End If
If Not (mobjThread Is Nothing) Then
mobjThread.Abort()
End If
End Sub
<< Alleen server stoppen >>
Private Sub MenuItem3_Click(.....) Handles MenuItem3.Click
If Not (mobjListener Is Nothing) Then
mobjListener.Stop()
End If
If Not (mobjThread Is Nothing) Then
mobjThread.Abort()
End If
End Sub |
[ Voor 0% gewijzigd door Stimpy001 op 11-10-2002 13:24 . Reden: sourcecode toegevoegd ]
Wat jij vergeten bent, hoeft voor mij geen spoed te zijn.