• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

tochano

[VB6] Winsock

4 mensagens neste tópico

Boa noite,

Estou a aprender a mexer com o winsock 6.0 o do Visual basic 6 e estou como seguinte problema... O prgrama cliente faz a ligação ao servidor, ha comunicação entre o servidor e o cliente, no cliente, faxo close à ligação mas depois ao se quiser voltar a faxer ligação dá o seguinte erro no programa cliente:

Run-time error '40006'

Wrong protocol or connection state for the requested transaction or request

Caso eu desligue e volte a ligar o programa servidor, o programa cliente volta a ligar sem problemas.. Ou seja, isto leva-me a pensar que no final de cada ligação, o servidor deve fazer uma especie de restart qualquer mas n sei como isso se faz... Caso não seja nada disso desculpem a ignorancia mas tou a aprender...

Espero ter-me feito entender...

Grato pela atenção.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas...

Não te esqueças que quando é estabelecida uma conexão ( no servidor ), o servidor deixa de estar em modo Listen para não aceitar mais pedidos de conexão. Deves ter no evento ConnectionRequest do teu componente winsock alfo do tipo -> winsockX.close

Logo, quando terminas essa conexão tens de voltar a colocar o servidor em modo Listen. -> winsockX.listen

Penso que é esse o problema  :P

P.S.

Para automatizares isso, basta colocar winsockX.listen no evento close do componente winsock.

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois, eu sei mas se não estou em erro eu tenho isso feito... ele fecha a ligação para depois a poder abrir mas não está a dar... :/ repara como trenho, posso ter algo mal.. :

Private Sub winsock1_ConnectionRequest(ByVal requestID As Long)
If winsock1.State <> winsock1 Then winsock1.Close
   winsock1.Accept requestID
End Sub

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Em vez de -> winsock1.State <> winsock1 - podes utilizar -> winsock1.State <> sckclosed.

E depois no evento Close  colocas :

Winsock1.Close
Winsock1.Listen

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora