27. juli 2004 - 22:20Der 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
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
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
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
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
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
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.
Næh.. :D Jeg har bare hele tiden tænkt at jeg vil have max forbindelser på 400... :/
Synes godt om
Ny brugerNybegynder
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.