Fórum Problemão com Socket: Assíncrono #285161
17/06/2005
0
Pessoal, me ajudem por favor! Não sei mais o que pensar a respeito de tanto que já apanhei.
Tenho duas aplicações com socket, Cliente/Servidor, em que estou tendo muitas dificuldades e não consigo descobrir onde estou errando.
A primeira vez eu conecto, envio uma mensagem do Cliente para o Servidor e desconecto, parece ficar tudo certo. Já na segunda vez seguida aparece o erro: Asynchronous socket error 10038. Se eu parar a execução do programa cliente logo em seguida a este erro, aparece o seguinte: Asynchronous socket error 10053.
Os erros são básicamente:
Asynchronous socket error 10053
ou
Asynchronous socket error 10061
ou
Asynchronous socket error
Para enviar as mensagens estou fazendo o seguinte no cliente:
Onde: csEnviar = ClientSocket
TimeOut = Variável booleana de segurança
Para receber o texto no servidor eu faço o seguite no evento OnClientRead:
Onde: ´ss´ = ServerSocket
Alguém pode me orientar sobre o que devo fazer? O objetivo dessas duas aplicações é basicamente abrir uma conexão do cliente com o servidor, enviar um texto e em seguida fechar a conexão entre cliente e servidor.
Valeu!
wbb
Tenho duas aplicações com socket, Cliente/Servidor, em que estou tendo muitas dificuldades e não consigo descobrir onde estou errando.
A primeira vez eu conecto, envio uma mensagem do Cliente para o Servidor e desconecto, parece ficar tudo certo. Já na segunda vez seguida aparece o erro: Asynchronous socket error 10038. Se eu parar a execução do programa cliente logo em seguida a este erro, aparece o seguinte: Asynchronous socket error 10053.
Os erros são básicamente:
Asynchronous socket error 10053
ou
Asynchronous socket error 10061
ou
Asynchronous socket error
Para enviar as mensagens estou fazendo o seguinte no cliente:
begin csEnviar.Address := IP_Estacao; repeat csEnviar.Active := True; Application.ProcessMessages; until (csEnviar.Active) or (TimeOut); if csEnviar.Active then begin csEnviar.Socket.SendText(Frame); csEnviar.Active := False; end;
Onde: csEnviar = ClientSocket
TimeOut = Variável booleana de segurança
Para receber o texto no servidor eu faço o seguite no evento OnClientRead:
procedure TForm1.ssClientRead(Sender: TObject; Socket: TCustomWinSocket); var msg_client:string; begin msg_client := socket.ReceiveText; memo.Lines.Append(msg_client); end;
Onde: ´ss´ = ServerSocket
Alguém pode me orientar sobre o que devo fazer? O objetivo dessas duas aplicações é basicamente abrir uma conexão do cliente com o servidor, enviar um texto e em seguida fechar a conexão entre cliente e servidor.
Valeu!
wbb
Wbb
Curtir tópico
+ 0
Responder
Posts
18/06/2005
Kapak
Olá colega, bom quando vc faz:Vc repete [b:aea7059da6]csEnviar.Active := true;[/b:aea7059da6] e com isto ele entra num looping de erros até que a conexão seja feita ou timeout.
Ative a propriedade somente uma vez e depois entre no looping:
A segunda parte é o lançamento das exceções 100xx que vc pode tratar e evitar nos eventos onError do TClientSocket e onClientError do TServerSocket. Note que nos dois eventos existe a variável ErrorCode que é colocada como referência; para que o sistema não lance a exceção, deixe: [b:aea7059da6]ErrorCode := 0;[/b:aea7059da6]
Bom, espero que solucione seu problema.
Abraços !!!
csEnviar.Address := IP_Estacao; repeat csEnviar.Active := True; Application.ProcessMessages; until (csEnviar.Active) or (TimeOut);
Ative a propriedade somente uma vez e depois entre no looping:
csEnviar.Address := IP_Estacao; csEnviar.Active := True; While not csEnviar.Active and not timeout do begin Sleep(1); // evita a CPU ficar em 100¬ Application.ProcessMessages; end;
A segunda parte é o lançamento das exceções 100xx que vc pode tratar e evitar nos eventos onError do TClientSocket e onClientError do TServerSocket. Note que nos dois eventos existe a variável ErrorCode que é colocada como referência; para que o sistema não lance a exceção, deixe: [b:aea7059da6]ErrorCode := 0;[/b:aea7059da6]
Bom, espero que solucione seu problema.
Abraços !!!
Responder
Gostei + 0
18/06/2005
Wbb
Fala aí kapak!
Olhe... você não tem idéia do quanto me ajudou. Putz... Show!!
Foram resolvidos os problemas fazendo exatamente como você indicou.
Muito obrigado pelas dicas.
wbb
Olhe... você não tem idéia do quanto me ajudou. Putz... Show!!
Foram resolvidos os problemas fazendo exatamente como você indicou.
Muito obrigado pelas dicas.
wbb
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)