Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [VB 6] winsock non accetta la connessione

    ciaoz. ecco che faccio:
    codice:
    Private Sub Command1_Click()
      Winsock1.LocalPort = 3128
      Winsock1.Listen
    End Sub
    
    Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
      Winsock1.Accept requestID
    End Sub
    quando vado a passare dei dati mi dice "Operazione non valida allo stato corrente" e il debug mi segnala la riga dove accetto la connessione col winsock.. sapete perchè?

  2. #2
    controlla in che stato è la connessione prima di
    Winsock1.Accept requestID

    con

    codice:
    msgbox Winsock1.state
    ...e quando meno te lo aspetti potrebbe capitare qualcosa di bello, di più importante di quello che avevi programmato...

  3. #3
    lo stato è su due, se non sbaglio dovrebbe essere in ascolto...
    :master:

  4. #4
    ecco l'errore, dovresti prima chiudere la porta in listen,
    non puoi avere una porta in ascolto e contemporaneamente connessa.....

    prova così:

    codice:
    Private Sub Form_Load()
        Winsock1.LocalPort = 3128
        Winsock1.Listen
    End Sub
    
    Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
        If Winsock1.State <> sckClosed Then Winsock1.Close
        
        Winsock1.Accept requestID
    End Sub
    
    Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
        Dim StringaArrivata As String
        Winsock1.GetData StringaArrivata
        MsgBox StringaArrivata
    End Sub
    in questo modo una volta che ci si è connessi non accetta + connessioni.......

    altrimenti devi "dirottare" la chiamata su una nuova porta e accettare li la connnessione e lasci la listen in ascolto.....
    ...e quando meno te lo aspetti potrebbe capitare qualcosa di bello, di più importante di quello che avevi programmato...

  5. #5
    Originariamente inviato da Markho

    in questo modo una volta che ci si è connessi non accetta + connessioni.......

    altrimenti devi "dirottare" la chiamata su una nuova porta e accettare li la connnessione e lasci la listen in ascolto.....
    normalmente si crea una collection di socket che quando uno accetta una connessione ne crea un'altro in ascolto sulla stessa porta
    Vascello fantasma dei mentecatti nonchè baronetto della scara corona alcolica, piccolo spuccello di pezza dislessico e ubriaco- Colui che ha modificato l'orribile scritta - Gran Evacuatore Mentecatto - Tristo Mietitore Mentecatto chi usa uTonter danneggia anche te

  6. #6
    esatto
    ...e quando meno te lo aspetti potrebbe capitare qualcosa di bello, di più importante di quello che avevi programmato...

  7. #7
    Private Sub Command1_Click()
    Winsock1.LocalPort = 3128
    Winsock1.Listen
    End Sub

    Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
    Winsock1.Close
    Winsock1.Accept requestID
    End Sub

    Oppure:
    Private Sub Command1_Click()
    Winsock1.LocalPort = 3128
    Winsock1.Listen
    End Sub

    Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
    Winsock2.Accept requestID
    End Sub
    "Meglio un aiuto che 50 consigli"
    (tratto dalle barrette Elah)

  8. #8
    Berello, è quello che ho scritto io....
    cmq la soluzione più elegante è fare come dice xegallo.......


    Ah, dimenticavo, qui:
    codice:
    Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long) 
    Winsock1.Close
    Winsock1.Accept requestID 
    End Sub
    è meglio che prima fai un controllo, altrimenti se il winsock è gia chiuso ti attacchi.....

    e poi questo:

    Oppure:
    codice:
    [...]
    Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long) 
    Winsock2.Accept requestID 
    End Sub
    non funziona perchè ti da errore "Operazione non valida allo stato corrente", v. il post di apertura.....


    ciao
    ...e quando meno te lo aspetti potrebbe capitare qualcosa di bello, di più importante di quello che avevi programmato...

  9. #9
    E' vero, scusate, ho ripetuto, non me ne ero accorto (oggi ho dormito poco).
    Comunque la seconda parte non è sbagliata: fa riferimento ad un altro winsock (infatti si chiama Winsock2).
    Scusate ancora...
    "Meglio un aiuto che 50 consigli"
    (tratto dalle barrette Elah)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.