softklin Posted August 13, 2006 at 09:37 PM Report #44160 Posted August 13, 2006 at 09:37 PM 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.
NuGuN Posted August 13, 2006 at 09:41 PM Report #44162 Posted August 13, 2006 at 09:41 PM 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
softklin Posted August 14, 2006 at 09:47 AM Author Report #44204 Posted August 14, 2006 at 09:47 AM Ya mais uma vez funcionou bem! 👍 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.
Dj_Pedro Posted January 2, 2008 at 01:13 AM Report #157361 Posted January 2, 2008 at 01:13 AM 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 😉
NuGuN Posted January 3, 2008 at 01:26 PM Report #157594 Posted January 3, 2008 at 01:26 PM 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
Dj_Pedro Posted January 3, 2008 at 10:05 PM Report #157703 Posted January 3, 2008 at 10:05 PM 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.
NuGuN Posted January 4, 2008 at 09:14 PM Report #157909 Posted January 4, 2008 at 09:14 PM Experimenta retirar aquelas duas barras (\\) do ip. Cumps
psiico Posted January 5, 2008 at 10:58 AM Report #157999 Posted January 5, 2008 at 10:58 AM 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... Psiico // Portfolio
Dj_Pedro Posted January 5, 2008 at 01:17 PM Report #158015 Posted January 5, 2008 at 01:17 PM 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.
NuGuN Posted January 5, 2008 at 05:49 PM Report #158093 Posted January 5, 2008 at 05:49 PM Para isso, tens de criar um controll array para o socket. E depois ires criando novos sockets em run-time. Cumps
Dj_Pedro Posted January 5, 2008 at 07:29 PM Report #158129 Posted January 5, 2008 at 07:29 PM Hmmmm e tens algum exemplo de como o fazer? Cumps.
NuGuN Posted January 6, 2008 at 12:19 AM Report #158175 Posted January 6, 2008 at 12:19 AM Fica em anexo um código com o que eu estava a dizer. Tem apenas o essencial, depois podes adicionar ou alterar o que queres. Podes ver também um exemplo um pouco mais elaborado aqui. Cumps
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now