[VB] Chat proggie bug

Pagina: 1
Acties:

  • Facer
  • Registratie: Januari 2002
  • Niet online

Facer

Ken net.....

Topicstarter
Ik ben bezig met een chat programma maar nu heb ik het volgende probleem:

Als de server een connectie binnenkrijgt wordt die verbonden naar Verbinding(Index) maar als nu een client een bericht stuurt naar de server dan stuur de server alleen een bericht terug naar De laaste geconnecte gebruiker.

Hier een stukje code van het terugsturen naar de client:
code:
1
2
3
4
5
6
7
8
Private Sub WSServer_DataArrival(Index As Integer, ByVal bytesTotal As Long)
    Log "Server: Data ontvangen van " & Index
    Log "Server: Stuurt data terug"
    For i = 1 To intMax
    WSServer(i).GetData strData2, vbString
    WSServer(i).SendData strData2
    Next i
End Sub

intMax = Het aantal connecties

  • Uiligheid
  • Registratie: December 2000
  • Laatst online: 20-08 15:21

Uiligheid

alle gekheid op een stokje

wordt iMax sowieso groter dan 1 in je code ?

Ceterum censeo Carthaginem esse delendam


Verwijderd

code:
1
2
3
4
5
6
7
8
Private Sub WSServer_DataArrival(Index As Integer, ByVal bytesTotal As Long)
    Log "Server: Data ontvangen van " & Index
    Log "Server: Stuurt data terug"
    For i = lbound(WSServer) To ubound(WSServer)
    WSServer(i).GetData strData2, vbString
    WSServer(i).SendData strData2
    Next i
End Sub

  • Facer
  • Registratie: Januari 2002
  • Niet online

Facer

Ken net.....

Topicstarter
Op woensdag 08 mei 2002 15:07 schreef Uiligheid het volgende:
wordt iMax sowieso groter dan 1 in je code ?
Ja die wordt groter als er een nieuwe connectie is

  • Facer
  • Registratie: Januari 2002
  • Niet online

Facer

Ken net.....

Topicstarter
Op woensdag 08 mei 2002 15:09 schreef skunkah het volgende:
code:
1
2
3
4
5
6
7
8
Private Sub WSServer_DataArrival(Index As Integer, ByVal bytesTotal As Long)
    Log "Server: Data ontvangen van " & Index
    Log "Server: Stuurt data terug"
    For i = lbound(WSServer) To ubound(WSServer)
    WSServer(i).GetData strData2, vbString
    WSServer(i).SendData strData2
    Next i
End Sub
Deze code toegevoegd maar nu krijg ik de error:
Compile error:
Expected array

Misschien handig dit is de hele VB code:
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
Dim intMax As Integer
Dim strData2 As String

Private Sub Log(Text As String)
list1.AddItem Text
list1.TopIndex = list1.NewIndex
End Sub

Private Sub LogClient(Text As String)
ChatClient.AddItem Text
ChatClient.TopIndex = ChatClient.NewIndex
End Sub

'Client laten connecten
Private Sub CmdClientConnect_Click()
WSClient.Protocol = sckTCPProtocol
WSClient.Connect "192.168.0.1", txtport.Text
LogClient "Client: Online"
cmdClientdisconnect.Enabled = True
CmdClientConnect.Enabled = False
Label1.BackColor = &HFF00&
End Sub

'Client laten disconnecten
Private Sub cmdClientDisconnect_Click()
WSClient.Close
LogClient "Client: Offline"
cmdClientdisconnect.Enabled = False
CmdClientConnect.Enabled = True
Label1.BackColor = &HFF&
End Sub

'Server laten connecten
Private Sub cmdServerConnect_Click()
WSServer(0).Protocol = sckTCPProtocol
WSServer(0).Bind txtport.Text
WSServer(0).Listen
Log "Server: Online"
cmdserverdisconnect.Enabled = True
cmdserverconnect.Enabled = False
Label2.BackColor = &HFF00&
End Sub
'Server laten disconnecten
Private Sub cmdServerDisconnect_Click()
For i = 0 To intMax
    WSServer(i).Close
Next i
Log "Server: Offline"
cmdserverdisconnect.Enabled = False
cmdserverconnect.Enabled = True
Label2.BackColor = &HFF&
End Sub

Private Sub cmdStuurclient_Click()
WSClient.SendData ChatTekst.Text
End Sub

Private Sub Form_Load()
intMax = 0
End Sub

Private Sub WSClient_DataArrival(ByVal bytesTotal As Long)
Dim strData As String
WSClient.GetData strData, vbString
LogClient "Client: " & strData
End Sub

Private Sub WSClient_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
Log "Client: Server not found"
Call cmdClientDisconnect_Click
End Sub

Private Sub WSServer_Close(Index As Integer)
    Log "Server: client nr. " & intMax & " is offline"
    WSServer(Index).Close
    verbinding(Index).Enabled = False
    verbinding(Index).Value = 0
End Sub

Private Sub WSServer_DataArrival(Index As Integer, ByVal bytesTotal As Long)
    Log "Server: Data ontvangen van " & Index
    Log "Server: Stuurt data terug"
    For i = LBound(WSServer) To UBound(WSServer)
    WSServer(i).GetData strData2, vbString
    WSServer(i).SendData strData2
    Next i
End Sub


Private Sub WSServer_ConnectionRequest(Index As Integer, ByVal requestID As Long)
'Log "Server: Incoming connection, requestID: " & requestID
If Index = 0 Then
    
    intMax = intMax + 1
    Load WSServer(intMax)
    WSServer(intMax).Accept requestID
    Log "Server: client nr. " & intMax & " is online"
    
    Load verbinding(intMax)
    verbinding(intMax).Top = verbinding(intMax - 1).Top + verbinding(0).Height
    verbinding(intMax).Visible = True
    verbinding(intMax).Value = 1
    verbinding(intMax).Caption = intMax
End If
End Sub

  • MrDry
  • Registratie: December 2001
  • Laatst online: 08-09 17:09

MrDry

Desperados!

Hoe is die variabele WSServer dan gedeclareerd? Moet wel een arry zijn anders werkt Ubound natuurlijk niet

Quod licet lovi, non licet bovi


  • Facer
  • Registratie: Januari 2002
  • Niet online

Facer

Ken net.....

Topicstarter
WSServer is de WinSock en dan () als Index van het WinSock protocol

  • Edd
  • Registratie: Januari 2001
  • Laatst online: 13:31

Edd

Moet het niet zo:
code:
1
2
3
4
5
6
7
8
Private Sub WSServer_DataArrival(Index As Integer, ByVal bytesTotal As Long)
    Log "Server: Data ontvangen van " & Index
    Log "Server: Stuurt data terug"
    WSServer(Index).GetData strData2, vbString
    For i = 1 To iMax
     WSServer(i).SendData strData2
    Next i
End Sub

Oftewel: De data ophalen van de werkelijke socket waar data aankomt (eenmalig) en die versturen aan alle sockets.. Wat jij deed was van alle sockets data ophalen en die terugsturen naar dezelfde socket, dat klopt totaal niet volgens mij.

-


  • Facer
  • Registratie: Januari 2002
  • Niet online

Facer

Ken net.....

Topicstarter
Thnx Edd nu werkt die *D

Verwijderd

ik zou er On Error Resume Next in zetten want nu ga je naar elke ooit geopende winsock schrijven dus ook gesloten winsocks.

  • Facer
  • Registratie: Januari 2002
  • Niet online

Facer

Ken net.....

Topicstarter
Met deze code
code:
1
2
3
4
5
6
7
8
Private Sub WSServer_DataArrival(Index As Integer, ByVal bytesTotal As Long)
    Log "Server: Data ontvangen van " & Index
    Log "Server: Stuurt data terug"
    WSServer(Index).GetData strData2, vbString
    For i = 1 To iMax
     WSServer(i).SendData strData2
    Next i
End Sub

stuur mijn programma maar naar 1 bericht maar als ik nu deze code ervan maak doet die het wel:
code:
1
2
3
4
5
6
7
8
9
10
Private Sub WSServer_DataArrival(Index As Integer, ByVal bytesTotal As Long)
    Log "Server: Data ontvangen van " & Index
    Log "Server: Stuurt data terug"
    WSServer(Index).GetData strData2, vbString
    For i = 1 To iMax
     WSServer(i).SendData strData2
       bericht = "Onzin"
       MsgBox bericht
    Next i
End Sub

Is het mogelijk om een delay te maken in VB om dit probleem op te lossen ofzo ?

En thnx voor de tip Tha_Ajp

Verwijderd

Ik zou er ook ff iets in zetten als
code:
1
If i == Index Next i

dan krijg je em zelf niet terug enzo

  • Facer
  • Registratie: Januari 2002
  • Niet online

Facer

Ken net.....

Topicstarter
Op woensdag 08 mei 2002 15:50 schreef Tha_Ajp het volgende:
Ik zou er ook ff iets in zetten als
code:
1
If i == Index Next i

dan krijg je em zelf niet terug enzo
Dat heb ik express niet gedaan omdat ik er een log bestand aan vast gaat maken maarja dat is bijzaak

  • Kama
  • Registratie: Mei 2002
  • Laatst online: 03-09 09:19

Kama

Aritifical Intelligenticus

Voor een "delay" kun je DoEvents gebruiken. Is niet echt een delay, maar die voert 1 "slag" alle events uit.

dus ipv die MsgBox line gewoon DoEvents neerzetten

Niels


  • Facer
  • Registratie: Januari 2002
  • Niet online

Facer

Ken net.....

Topicstarter
Kama ook bedankt

Echt een uitvinding is GOT :9~

Verwijderd

hmm de beste oplossing is een service pack te downloaden voor VB, want dit is een gekende bug in de winsock ActiveX
dan heb je geen DoEvents nodig

  • Facer
  • Registratie: Januari 2002
  • Niet online

Facer

Ken net.....

Topicstarter
Op woensdag 08 mei 2002 16:23 schreef GrAviTy het volgende:
hmm de beste oplossing is een service pack te downloaden voor VB, want dit is een gekende bug in de winsock ActiveX
dan heb je geen DoEvents nodig
Ja maar dan is toch eigenlijk de DoEvents makkelijker want dan kan iedereen er gebruik van maken zondag dat ze iets extra hoeven te downloaden lijkt mij
Pagina: 1