Problemão com Socket: Assíncrono
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
Curtidas 0
Respostas
Kapak
17/06/2005
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 !!!
GOSTEI 0
Wbb
17/06/2005
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
GOSTEI 0