Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Cypher

Problemas com o Winsock

Recommended Posts

Tenho k comunicar com outro pc uso o winsock até aki está tudo bem !!!

 

só que no meio quando envio alguns dados

 

WskS1.SendData tsend

as vezes salta a instrução e não a executa

 

tipo tenho isto

 

	strsend = ""	tsend = ""	For ii = 1 To 7		strsend = strsend & "&" & dados_baralhados(ii)	Next ii		tsend = "dados_iniciais" & strsend	WskS1.SendData tsend		agora = Now	lst_monitor_server.AddItem (agora + " - dados enviados")

salta a instrução

 

WskS1.SendData tsend

se puser um msgbox depois do sendData ja faz tudo bem e assim não queria

 

A comunidade aqui não sabe uma maneira de executar a instrução sem ter a msgbox depois?????

 

ou explicarem me porque é que salta a instrução!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como você sabe que ele "salta"? Não seria um problema na recepção dos dados?

 

Abraços,

 

Graymalkin

PS: Alterei o título do tópico, por motivos óbvios.

Compartilhar este post


Link para o post
Compartilhar em outros sites

vou tentar explicar de outra maneira....

 

o codigo que eu postei aqui pertence a aplicação de um servidor !

 

e cliente recebe os dados logo se eu percorrer o projecto pertencente ao servidor linha a linha (F8) o programa envia os dados e o cliente recebe os dados! tal como eu pretendo http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

mas se eu fizer um runtime (F5) o cliente já não recebe dados nenhuns !! isto deixa-me um bocado confuso

se funciona linha a linha devia funcionar quando o compilamos todo CERTO? :huh:

 

E como faxemos nos os programadores quando os programas não funcionam tentamos perceber do que é pondo limitações fazendo de diferente maneira... e decidi por uma msgbox depios do WskS1.SendData tsend e para surpresa minha quando corro o programa (F5) o cliente recebe os dados... Só que o o utilizador do servidor tem que carregar na MSGBOX e isso não está nos meus planos.... Simplesmente devia enviar sem ser necessário intrevir o utilizador !!

 

É por isso que eu diigo que salta a instrução e gostaria saber porque?? ou alguma explicação obvia ou ainda outra maneira de dar a volta ao programa sem utilizar a MSGBOX

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que existe em comum entre colocar uma MsgBox e ir executando linha a linha? Em ambos os casos é feita uma "pausa", entre a execução de uma linha e outra. O envio e a recepção do Winsock são assíncronos, portanto aquela linha subsequente a do "Send" pode ser executada antes que os dados tenham realmente chegado do outro lado. Sendo que se você está mandando enviar ele vai enviar, já receber são outros quinhentos. E, é justamente por isso que eu acho que o problema está na recepção e não no envio. Qual o código que recebe estes dados?Abraços,Graymalkin

Compartilhar este post


Link para o post
Compartilhar em outros sites

pois eu pensava que era sincrona :wacko:

 

o código é este!!! o que recebe!!

 

Private Sub WskCJOGO_DataArrival(ByVal bytesTotal As Long)		WskCJOGO.GetData dados		indik = Mid(dados, 1, 15)		If indik = "cartas_iniciais" Then Call dar_cartasEnd Sub

este código é o que se encontra no cliente!

 

será que se puser um time antes por mais pequeno que seja funcione???

 

tenho que exprimentar !!

 

mas agradeço desde ja a opiniao do que será!

 

 

Cypher

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, o código está legal. Sendo que você está verificando por "cartas_iniciais", porém você envia "dados_iniciais" (conforme o primeiro código). Outro problema é que essa string pode *não* estar nos 15 primeiros caracteres recebidos. Neste caso, seria aconselhável usar InStr() para fazer esse tipo de verificação.Abraços,Graymalkin

Compartilhar este post


Link para o post
Compartilhar em outros sites

Posso garantir que passa para além dos 15 caracteres...

ja tive esse cuidado !!!

 

Mas continua sem perceber... :blink:

 

não existe nenhuma função que ...por exemplo ja reparei que só consigo dar a volta a este problema a partir de uma msgbox .. visto que tb não me dão grandes alternativas <_< .... não interessa, quer dizer interessar interessa mas é só para alguns :angry: que ao mostrar uma msgbox se "desaparexa" que se "unload me " gostei desta unload me :lol: que termine a msgox????????????

Compartilhar este post


Link para o post
Compartilhar em outros sites

Posso garantir que passa para além dos 15 caracteres...

ja tive esse cuidado !!!

 

Mas continua sem perceber... :blink:

 

não existe nenhuma função que ...por exemplo ja reparei que só consigo dar a volta a este problema a partir de uma msgbox .. visto que tb não me dão grandes alternativas <_< .... não interessa, quer dizer interessar interessa mas é só para alguns :angry: que ao mostrar uma msgbox se "desaparexa" que se "unload me " gostei desta unload me :lol: que termine a msgox????????????

Bom, ficar no *desespero* é o que realmente **não** vai resolver o caso. Sempre nos deparamos com esses tipos de problemas (da coisa não funcionar do jeito que a gente quer), e creio que a melhor solução neste caso é fazer um teste bem simples separado. Já tentou fazer um outro projeto simples no qual você envie uma string para outro projeto e este a receba e a mostre? Se sim, deu certo? Se deu certo, já tentou fazer esse programa enviar de volta a string para o primeiro e conseguiu?

Ah, e você ainda não me disse como sabe que a string não está chegando no destino. Colocar um Stop, dependendo de onde você o coloca, não te mostraria isso.

 

Abraços,

 

Graymalkin

Compartilhar este post


Link para o post
Compartilhar em outros sites

bem em 1 lugar não estou desesperado simplesmente desiludido ! http://forum.imasters.com.br/public/style_emoticons/default/ermm.gif

 

2

já exprimentei de uma maneira mais simples ... e funciona tipo um chat só que a gente precisa de carregar num botão para enviar ou de o SendData se encontar "sozinho" ser a unica instrução no procedimento, mas um procedimento a partir de alguma interação do utilizador (clique numa caixa num botão ... ect...), que é o que não pretendo no projecto que tou fazendo... e se fizer a partir de um clique por exemplo o cliente recebe !! e sem o clique a partir do meio de por exemplo uma estrutura de decisão ja não funciona...

 

3

sei que a string não está chegando ao destino ... porque tenho uma textbox que recebe os dados recebidos do servidor e se não utilizar um botão ou um msgbox pertencente ao servidor a caixa de texto do cliente não recebe nada, agora se utilizar o botão ou uma msgbox ja recebe... e tb activei o antivirus e quando o vb executa a instrução SendData o antivirus mostra logo um aviso por causa dos dados de comunicação a ser enviados pode ser um virus bla bla bla simplesmente para saber que se esta a tentar comunicar com outro pc e quando não mostra o aviso o antivirus é quando o cliente não recebe nada na sua textbox que é quando não tenho um botão ou um msgbox...

 

por isso acho a questão de uma paragem incontornavel !!

 

4

como é mesmo a utilização da isntrução STOP ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

bem em 1 lugar não estou desesperado simplesmente desiludido ! http://forum.imasters.com.br/public/style_emoticons/default/ermm.gif

Bom, você não precisa clicar num botão ou em uma Msgbox para que o seu antivírus se atualize via Internet, não é? Nem precisa ficar clicando num botão ou em uma Msgbox para receber um arquivo que você esteja baixando, não é mesmo? Então, o problema não é incontornável.

2 já exprimentei de uma maneira mais simples ... e funciona tipo um chat só que a gente precisa de carregar num botão para enviar ou de o SendData se encontar "sozinho" ser a unica instrução no procedimento, mas um procedimento a partir de alguma interação do utilizador (clique numa caixa num botão ... ect...), que é o que não pretendo no projecto que tou fazendo... e se fizer a partir de um clique por exemplo o cliente recebe !! e sem o clique a partir do meio de por exemplo uma estrutura de decisão ja não funciona...

Humm... já é algo novo. Você pode dar um exemplo do que você tentou primeiro e não funcionou? Ou melhor, do que você quer fazer (onde não há interação do usuário) e que não funcione?

3 sei que a string não está chegando ao destino ... porque tenho uma textbox que recebe os dados recebidos do servidor e se não utilizar um botão ou um msgbox pertencente ao servidor a caixa de texto do cliente não recebe nada, agora se utilizar o botão ou uma msgbox ja recebe... e tb activei o antivirus e quando o vb executa a instrução SendData o antivirus mostra logo um aviso por causa dos dados de comunicação a ser enviados pode ser um virus bla bla bla simplesmente para saber que se esta a tentar comunicar com outro pc e quando não mostra o aviso o antivirus é quando o cliente não recebe nada na sua textbox que é quando não tenho um botão ou um msgbox...por isso acho a questão de uma paragem incontornavel !!

Ok, e o que seria executado (sem a interação do usuário) e que deveria enviar os dados? Você usa algum Timer ou coisa do tipo?

4 como é mesmo a utilização da isntrução STOP ?

Coloque um Stop dentro da rotina WskCJOGO_DataArrival e veja se ela é executada quando o programa deveria receber os dados.Abraços,Graymalkin

Compartilhar este post


Link para o post
Compartilhar em outros sites

bem simplesmente o que eu quero é que funcione o envio de dados que é onde está o prolblema porque receber bem recebe !!sem que o utilizador faça nada que ao abrir o executavel do servidor o cliente recebe os dados percebeu !? e só funciona pondo no servidor uma msgbox depois do send data... que é o que eu não quero :Dcom o stop para mesmo :D loloutra alternativa uma função qualquer coisa que tenha o mesmo efeito da msgbox mas que não seja necessario o utilizador intervirCypher

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hummm... como você faz a conexão? Você já envia os dados logo após conectar ou você tem uma rotina de espera para certificar-se que a conexão foi estabelecida?

Talvez seja este o problema. Aliás, dê uma olhada também no meu tutorial sobre winsock que escrevi há um tempo atrás (talvez tenha algo lá que possa te interessar): http://www.onmasters.com.br/?area=ler_arti...os&artid=64

 

Abraços,

 

Graymalkin

Compartilhar este post


Link para o post
Compartilhar em outros sites

não enviar envio e recebe muito bem e já reparei no promenor de mandar uma mensagem apos a conexão dá erro :D que se resolve pondo uma msgbox no meio das duas instruções...haverá alguma instrução que tenha o mesmo efeito?? sem ser uma msgbox?!?ou outra saida sem ser por uma msgbox ??? sem ter que o utilizador carregar os botões é obvio que se podia resolver isto , apos da conexão carregavamos num botão e envia-va os dados se que como ja disse aqui gostaria que o utilizador não tivesse qualquer tipo de conexão com o executavel simplesmente abrilo meter o IP e enviar automaticamente os dados!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos fazer o seguinte então: crie um projeto exemplo em que esse problema ocorra e envie para o meu e-mail (wap@openlink.com.br). Vai ficar mais fácil de ajudar se eu puder visualizar o código inteiro e testá-lo aqui.Abraços,Graymalkin

Compartilhar este post


Link para o post
Compartilhar em outros sites

Segui os procedimentos que estavam no arquivo texto, mas não apareceu nada de "janeiro" nem "abril" e sim "cartas_iniciais&28&104&45&69&21&93&45" para o 1º cliente e "cartas_iniciais&78&55&60&11&76&102&60" para o 2º cliente. Não é isso que deveria aparecer?Quanto ao seu problema em relação as portas, você poderia disponibilizar uma única porta e todos se conectariam a ela. O pulo-do-gato é que na hora de aceitar a conexão (Accept), que ocorre no evento ConnectionRequest, você iria fazê-lo com outro socket. Você poderia criar um array de sockets e carregar um a mais dinamicamente, a cada vez que alguém tentasse conectar, e então utilizá-lo para aceitar a conexão.Abraços,Graymalkin

Compartilhar este post


Link para o post
Compartilhar em outros sites

http://forum.imasters.com.br/public/style_emoticons/default/worshippy.gif Ham... http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

Bem quanto ao "cartas_iniciais&28&104&45&69&21&93&45" tinha dito que ficaria "janeiro" http://forum.imasters.com.br/public/style_emoticons/default/blush.gif não interessa era mesmo "cartas_iniciais&28&104&45&69&21&93&45" simplesmente pus "janeiro" para não parecer uma coisa tao complicado .. :lol:

 

Então achas melhor na tua opinião criar para todos os clientes a mesma porta ?

 

Assim não é necessário andar sempre a fechar a porta sempre que se quer enviar dados a outro cliente?

 

E não haverá problemas por exemplo se ao conectar um cliente antes de fechar a porta se conectar outro cliente?

 

E assim já ficava resolvido o problema de andar a carregar no botão para fechar a porta ?

 

 

Cypher [[]]

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.