Avatar billede cronck Nybegynder
27. juli 2004 - 22:20 Der er 14 kommentarer og
2 løsninger

Winsock, find ubrugt, og opret forbindelse

Jeg bruger hele tiden Winsock(0) til at lytte efter forbindelser...
Når en så connecter, skal programmet selv finde en ledig winsock forbindelse. For eks. Winsock(1)...
Jeg har lavet dette script, men det virker ikke, Winsock er jo ikke noget array :(

    For x = 0 To 400
        If Winsock(x).State = 0 Then
            Winsock(x).Accept requestID
            AddConnectionArray (x)
            Exit For
        End If
    Next
Avatar billede cronck Nybegynder
27. juli 2004 - 22:27 #1
Hvis jeg dimmer winsock for eks. sådan her:
Dim Winsock() as Connection, så kender den ikke .State
Avatar billede cronck Nybegynder
27. juli 2004 - 22:32 #2
Dim Winsock() as Winsock
Virker vist.. Nu får jeg bare "Subscript out of range" ved Winsock(x).State
Avatar billede cronck Nybegynder
27. juli 2004 - 22:42 #3
Hmm.. rettede lige en fejl... Sådan her ser min kode ud nu, og virker stadig ikke... Subscript out of range

Dim Winsock() As Winsock
    For x = 1 To 400
        If Winsock(x).State = 0 Then
            Load Winsock(x)
            Winsock(x).Accept requestID
            AddConnectionArray (x)
            Exit For
        End If
    Next
Avatar billede sjh Nybegynder
28. juli 2004 - 00:25 #4
måske du skulle loade ( Load Winsock(x) ) før du tjekker om Winsock(x).State = 0
Avatar billede cronck Nybegynder
28. juli 2004 - 07:32 #5
Gjorde jeg senere, men det løste heller ikke problemet.. stadig samme fejl
Avatar billede hiks Nybegynder
28. juli 2004 - 09:18 #6
du prøver vel at loade en winsock(x) som allerede eksisterer - altså du tester først på om winsock(x).State = 0 - efterfølgende vil du loade den. Hvis den ikke eksisterer altså den control får du vel en fejl. Så hvis du vil teste på den måde der skal du vel bruge

If err <> 0 then
        If Winsock(x).State = 0 Then
            Load Winsock(x)
            Winsock(x).Accept requestID
            AddConnectionArray (x)
            Exit For
        End If
Else
        'noget kode der skal håndtere hvis winsocken ikke er loadet...
End if

/hiks
Avatar billede hiks Nybegynder
28. juli 2004 - 09:20 #7
det ovenstående vender vist heller ikke helt rigtigt...

du skal før if err <> 0 then indsætte eksempelvis winsock(x).visible = true for at finde ud af om den eksisterer eller ej.

/hiks
Avatar billede cronck Nybegynder
28. juli 2004 - 15:20 #8
Method or data member not found... '.Visible ='
Avatar billede cronck Nybegynder
28. juli 2004 - 15:45 #9
Jeg har fjernet "winsock(x).visible = true", og den kommer aldrig igennem "If err <> 0" så den har jeg også fjernet... Min kode ser nu sådan her ud:

Private Sub Winsock_ConnectionRequest(Index As Integer, ByVal requestID As Long)
Dim Winsock() As Winsock
    For x = 1 To 400
        If Winsock(x).State = 0 Then
            Load Winsock(x)
            Winsock(x).Accept requestID
            AddConnectionArray (x)
            AddToLog ("Client Connected from " & Winsock(Index).RemoteHostIP)
            Exit Sub
        End If
    Next
End Sub

Fejlen er 'Subscript out of range' i linien:
        If Winsock(x).State = 0 Then
Avatar billede hiks Nybegynder
28. juli 2004 - 15:48 #10
hej

prøv sådan her istedet - kunne ikke lige huske om winsock havde en visible method men den har en tag... du skal endvidere huske at unloade brugte connections ellers vil du jo hurtigt få brugt 400.

For x = 0 To 400
    If Winsock(x).Tag = "" Then
        If Err <> 0 Then
            If Winsock(x).State = 0 Then
                Winsock(x).Accept requestID
                AddConnectionArray (x)
                Exit For
            End If
        Else
            'ingen fejl derved er der altså en winsock
        End If
    End If
Next

/hiks
Avatar billede hiks Nybegynder
28. juli 2004 - 15:49 #11
og du skal i din sub have en:

on error resume next

/hiks
Avatar billede hiks Nybegynder
28. juli 2004 - 15:53 #12
så ikke lige den sidste af dine beskeder her så har lige rettet den til så du får addtolog osv med:

Private Sub WinSocken()

On Error Resume Next

For x = 0 To 400
    If Winsock(x).Tag = "" Then
        If Err <> 0 Then
            If Winsock(x).State = 0 Then
                Load Winsock(x)
                Winsock(x).Accept requestID
                Call AddConnectionArray(x)
                Call AddToLog("Client Connected from " & Winsock(Index).RemoteHostIP)
                Exit Sub
            End If
        Else
            'ingen fejl derved er der altså en winsock
        End If
    End If
Next

End Sub
Avatar billede cronck Nybegynder
28. juli 2004 - 21:26 #13
Det sidste virker!!!! :D
Jeg takker dig tusind gange! Jeg har ikke kunne finde en løsning på det her i laaang tid... :/

Svar = 100% Accepteret :o)
Avatar billede hiks Nybegynder
28. juli 2004 - 21:31 #14
godt at høre...

hvis du vil lidt videre kan du jo adskille fejlene i en sådan sub ved at teste på det enkelte fejl number som opstår som vil være forskelligt alt efter om det er en winsock fejl vi har provokeret eller en som opstår pga noget andet.

If Err <> 0 Then ' skal således laves om...

go fornøjelse med det.

/hiks
Avatar billede sjh Nybegynder
28. juli 2004 - 21:32 #15
cronck >Loader du 401 Winsock når du starter dit program??
Avatar billede cronck Nybegynder
28. juli 2004 - 22:42 #16
Næh.. :D
Jeg har bare hele tiden tænkt at jeg vil have max forbindelser på 400... :/
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