GARANTIR DESCONTO

Fórum Erro assícrono 10049 #340487

17/04/2007

0

Bom dia a todos.

Estou tendo problemas com socket. Preciso desenvolver um sistema de troca de informações entre o servidor e as estações.
Ao efetuar os testes com dois terminais, lentamente, funciona beleza. Mas ao efetuar os testes de forma rápida e repetitiva, está gerando erro Assícrono 10049.
Segue abaixo o código do servidor e da estação:

***** código de solicitação das estações ************
procedure TForm2.Button12Click(Sender: TObject);
begin
ClientSocket1.address := ´192.168.0.101´; // conectando ao servidor
ClientSocket1.Active := True;
end;

procedure TForm2.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
ClientSocket1.Socket.SendText(´192.168.0.5´); // enviando IP_terminal
end;

procedure TForm2.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
begin // recebendo resposta
resp := Socket.ReceiveText; // resposta do servidor
ClientSocket1.Active := false;
end;

******* Programa no servidor ***************
OBS: recebe = ClientSocket
manda = ServerSocket

procedure TFOlho.mandaAccept(Sender: TObject; Socket: TCustomWinSocket);
begin // informa quem está conectando
IsServer := True;
label5.caption := ´Conectado a : ´ + Socket.RemoteAddress;
end;

procedure TFOlho.recebeRead(Sender: TObject; Socket: TCustomWinSocket);
begin // recebendo os dados da estação
terminal := Socket.ReceiveText;
Verifique;
end;

procedure TFOlho.mandaClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin // recebendo os dados da estação (aqui talvez não precise)
terminal := Socket.ReceiveText;
Verifique;
end;

procedure TFOlho.mandaClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
label5.caption := ´Aguardando Conexão...´;
end;

procedure TFOlho.Verifique;
begin
Recebe.Active := False;
// busco no BD quem está ativo

recebe.host := ´192.168.0.101´;
recebe.Active := True;
end;

procedure TFOlho.recebeConnect(Sender: TObject; Socket: TCustomWinSocket);
begin
if IsServer then
manda.Socket.Connections[0].SendText(resp)
else
recebe.Socket.SendText(resp);
end;

Grato pela atenção.


Turbo Drive

Turbo Drive

Responder

Posts

17/04/2007

Massuda

[quote:f8ec55f33b=´Turbo Drive´]erro Assícrono 10049.[/quote:f8ec55f33b]esse erro indica que o endereço ao qual você está tentando conectar é inválido. Seu código tem vários IPs hardcoded que devem estar de acordo com a sua rede. Fora isso, verifique se a propriedade Port dos componentes está configurada corretamente (port = 0 é um valor inválido que pode causar esse erro)


Responder

Gostei + 0

17/04/2007

Turbo Drive

Valeu, Massuda pela dica, mas infelizmente o endereço está correto. É como falei anteriormente, este erro só ocorre quando eu tento enviar e receber rapidamente.
Se vc verificar o código que enviei, verá que a solicitação está em um botão. O meu teste consiste em pressionar o botão várias vezes apidamente. Quando eu faço isso em apenas um PC, executa perfeitamente. Agora se pressionar o botão várias vezes em dois PC´s, após uns 2 segundos, o programa no servidor pára de responder e joga o erro 10049.
Vc teria alguma idéia do que pode estar ocorrendo ?

Grato pela atenção.


Responder

Gostei + 0

17/04/2007

Massuda

O teste que você está fazendo parece estar sempre criando uma nova conexão (não uso esses componentes, não sei como eles funcionam). Pode acontecer do servidor tentar enviar dados para uma conexão que já não existe mais. Você está vendo o evento de disconnect ser gerado no servidor quando você desconecta o cliente?


Responder

Gostei + 0

17/04/2007

Turbo Drive

Infelizmente, só estou jogando um label dizendo q foi desconectado e mais nada.
Vc teria alguma sugestão para acrescentar a este evento ?


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar