Avatar billede blueice Nybegynder
12. august 2005 - 00:08 Der er 3 kommentarer og
1 løsning

Winsock Blander Data sammen

'Jeg har VB6, WinXP Home

'Jeg har lavet en server side i VB med winsocks, min problem er at når der er mere end 2 clienter tilslutter, blander den data sendt fra clienterne til serveren sammen

'eks, hvis Client1 skriver "te"
'og men Client1 skriver "te" skriver Client2 "st"
'Så bliver mit output "test"... Det skulle det jo ikke være....

'Jeg tror det er noget med "Dim StrDataTemp as String" placeringen i koden..

Hvor skal jeg stille "Dim StrDataTemp as String" ?

Hvis man kan vil jeg hellere have et array der hed StrDataTemp() med indholdet for hver client)

'---Form1----
'3 Winsocks(Listen,Client,Verify), 1 MSFlexGrid(MSFlexGrid1), 1 Statusbar (Statusbar1 (4 paneler)

Option Explicit
Dim Users As Integer
Dim TelnetServer As String
Dim Telnet As String
Dim StrData As String
Dim StrSplit() As String
Dim StrDataTemp As String
Dim Tid As String



Private Sub Form_Load()
With MSFlexGrid1
.Rows = 2
.Cols = 5
End With
MSFlexGrid1.FormatString = "User|User IP              | RequestID|Status    |Last Response        "
StatusBar1.Panels(2).Text = "USERS:"
Telnet = "on"
Listen.Bind 136
Listen.Listen
Tid = Hour(Time) & ":" & Minute(Time) & ":" & Second(Time)
If TelnetServer = "on" Then
Telnet = vbNewLine
Else
Telnet = ""
End If
End Sub

Private Sub Listen_ConnectionRequest(ByVal requestID As Long)
Users = Users + 1
Load Verify(Users)
Load Client(Users)
Verify(Users).Accept requestID
Verify(Users).SendData "LOGON" & Telnet
If MSFlexGrid1.Rows >= Users + 1 Then MSFlexGrid1.Rows = Users + 2
With MSFlexGrid1
    .TextMatrix(Users, 0) = Users
    .TextMatrix(Users, 1) = Verify(Users).RemoteHostIP
    .TextMatrix(Users, 2) = requestID
    .TextMatrix(Users, 3) = "Log on"
    .TextMatrix(Users, 4) = Now
End With



End Sub

Private Sub Verify_Close(Index As Integer)
MSFlexGrid1.TextMatrix(Index, 3) = "Offline"
MSFlexGrid1.TextMatrix(Index, 4) = Now
End Sub
Private Sub Client_Close(Index As Integer)
MSFlexGrid1.TextMatrix(Index, 3) = "Offline"
MSFlexGrid1.TextMatrix(Index, 4) = Now
End Sub

Private Sub Verify_DataArrival(Index As Integer, ByVal bytesTotal As Long)


Verify(Index).GetData StrData
Debug.Print Tid & " " & Verify(Index).RemoteHostIP & ">StrData= " & StrData
If StrData = vbNewLine Then
    StrData = ""
    StrData = StrDataTemp
   
    StrDataTemp = ""
    StrSplit() = Split(StrData, ":")
   
    If UBound(StrSplit()) > 0 Then
   
        If UCase(StrSplit(0)) = "USER" Then
   
           
                If UCase(StrSplit(1)) = "PASSWORD" Then
   
                    Verify(Index).SendData "LOGON OK" & Telnet
                    Client(Index).RemoteHost = MSFlexGrid1.TextMatrix(Index, 1)
                    Client(Index).Accept MSFlexGrid1.TextMatrix(Index, 2)
                    MSFlexGrid1.TextMatrix(Index, 3) = "Online"
                    Client(Index).SendData "CLIENT LOGON"
                   
                Else
                   
                    Verify(Index).SendData "WRONG PASSWORD" & Telnet
                    Debug.Print StrSplit(1)
                   
                End If
        Else
        Debug.Print "USER FALSE"
        Debug.Print StrSplit(0)
        Verify(Index).SendData "ERROR IN LOGIN" & Telnet
   
        End If

    End If
   
Else
If StrData = vbNewLine Then StrData = ""
StrDataTemp = StrDataTemp & StrData
   
End If
MSFlexGrid1.TextMatrix(Index, 4) = Now
StatusBar1.Panels(3).Text = Index
StatusBar1.Panels(4).Text = StrDataTemp

End Sub

---Form1----
MVH
BlueIce
Avatar billede rbj_fp Nybegynder
12. august 2005 - 09:05 #1
Jeg tror dit problem består i at du kun lytter på 1 socket.

Normalt ville man oprette en socket til at lytte efter nye forbindelser, og når den modtager en request, skaber den en ny socket forbindelse kun til denne request. Normal opretter man derfor en socket som et array af sockets.

// RBJ_FP
Avatar billede blueice Nybegynder
12. august 2005 - 21:35 #2
Fandt ud af det løste det ved at lave strDataTemp om til et array

løsning:
Dim strDataTemp as string --> Dim strDataTemp(0 to 1000 as string)

Lukker spørgsmålet med mindre der er nogen der kan løse det uden brug af arrays
Avatar billede sjh Nybegynder
14. august 2005 - 15:08 #3
luk du bare dit spørgsmål.. det kan nok ikke gøres bedre..
Avatar billede blueice Nybegynder
16. august 2005 - 13:45 #4
Lukke lukke lukke
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester