Jump to content

Recommended Posts

Posted

Olá pessoal.

De continuação com o meu projecto de falar numa rede, gostava que me esclarececem acerca de um erro que surge.

Quando defino o programa (supondo que agora nesta versão experimental apenas um computador envia mensagens - cliente - e o outro recebe - servidor) para "escutar" (listen) mensagens (no lado servidor), este dá um erro de "incorrect state", ou seja, aparentemente o estado para escutar está incorrecto.

Não me consigo explicar melhor... ? Vejam o código sff

----- Código que corre no lado cliente (envia msgs) ---------

Private Sub Form_Load()
winsock1.remotehost = "xxx.xxx.xxx.xxx" 'IP de ligacao
winsock1.remoteport = xxxx 'Porta
winsock1.connect
end sub

Private Sub cmdEnviaMsg()
winsock1.sendData txtMensagem
end sub

----- Código que corre no lado servidor (recebe msgs) ---------

Private Sub Form_Load()
winsock1.localport = xxxx
winsock1.listen 'Pa ficar a "ouvir" mensagens
end sub

Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
winsock1.accept requestID  'Faz auto accept e e aqui que da bug
end sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
dim sMsg as string
winsock1.getData sMsg
lstMensagens.AddItem sMsg
end sub

Bom, eu penso que o problema está mesmo na Connection Request! Quando chega a este passo, dá o erro de que o estado não é válido (winsock1.state = 6 quando deveria ser winsock1.state=2)...

Já agora, não tenho o programa escrito ainda, porque isto é código ainda para ser revisto, consoante a resolução.

Espero ter explicado bem...  👍 Desde já obrigado!

Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Posted
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)

winsock1.accept requestID  'Faz auto accept e e aqui que da bug

end sub

Faltate ai uma linha. Tens de meter esta linha antes dessa(winsock1.accept requestID)

Winsock1.Close

Para não aceitar mais conecções nenhumas  👍

Cumps

  • 1 year later...
Posted

Eu tentei fazer isso e dá-me sempre erro: "Run-time error '10022': socket not bound or listen is not invoked prior to accept".

Este erro dá tanto no Servidor como no Cliente  :dontgetit:

O Debug aponta para o winsock1.connect.

Alguém sabe o porquê e como o resolver?

Obrigado 😉

Posted

Boas... Para te dar esse erro tanto no cliente como no servidor... Que portas estas a utilizar, e no servidor que IP estas a colocar? Podes aqui colocar o código tal e qual o tens?

Cumps

Posted

Bom agora já consegui por o servidor (adicionei antes de por o ip \\) mas o cliente esta com o mesmo problema :S

Como pedido aqui fica o código do servidor:

Private Sub Form_Load()
Winsock1.remotehost = "\\192.168.2.2" 
Winsock1.remoteport = 123 
Winsock1.Connect
End Sub

Private Sub cmdEnviaMsg()
Winsock1.sendData txtMensagem
End Sub

E do local:

Private Sub Form_Load()
Winsock1.localport = 123 
Winsock1.listen
End Sub

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

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim sMsg As String 
Winsock1.GetData sMsg
lstMensagens.AddItem sMsg
End Sub

Cumps.

Posted

as duas barras usa-se normalmente quando é para aceder por rede local, nao é? tipo para aceder aos ficheiros partilhados \\IP ou \\hostname...

tu nao precisas das duas barras(\\) porque o winsock vai correr sobre 1 protocolo que tu expecificas, http, ftp, etc...

Posted

Já resolvi o problema, por mais estúpido que pareça bastou compilar o programa, executar o exe e já não dava erro  😉

Alguém tem dicas de como fazer um chat para vários utilizadores? É que sockets ainda não sei muito manobrar e pelo que percebi o socket só pode receber uma informação certo?

Não seria possível algo:

Servidor:

winsock1.sendData texto_nick
winsock1.sendData texto_texto

Cliente:

Dim texto_texto, texto_nick As String
winsock1.GetData texto_nick
winsock1.getdata texto_texto

?? ?? ??

Cumps.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.