GARANTIR DESCONTO

Fórum Socket Assíncrono #351962

16/01/2008

0

Pessoal,

Alguém sabe ou tem material a respeito do que é um socket assíncrono e para serve.

Tem alguém que me pediu para fazer um software utilizando socket assíncrono, mas estou em dúvida a respeito.

Se alguém puder me ajudar desde já agradeço.


Lucaoliveira

Lucaoliveira

Responder

Posts

17/01/2008

Massuda

Basicamente você deve usar os componentes TClientSocket e TServerSocket que vem com o Delphi (dependendo da versão do Delphi, os nomes podem ser ligeiramente diferentes). Não trablaho com esses componentes, mas acredito que outros colegas do fórum podem te dar mais informações.


Responder

Gostei + 0

17/01/2008

Lucaoliveira

O que vc quer dizer que estes componentes(TClientSocket e o TServerSocket) que vc citou já são assíncronos por padrão?


Responder

Gostei + 0

17/01/2008

Massuda

Sim, internamente eles usam sockets assincronos.


Responder

Gostei + 0

17/01/2008

Marcal

Amigos bom eu ja passei por algumas esperiencias com Socket ja tenho aplicações rodando blzinha mais confesso q ainda falta muito pra ficar 100¬ bom mais deixa tentar te esplicar e ver se era isso mesmo q era a duvida sua:
Eu Utilizo os Componentes TServerSocket, ClienteServerSocket D7 os quais se for pra versao 2005 do delphi vc terar q migrar para os INDY. para monitorar as Conexoes TCP-IP.
O Funcionamento deles e basicamente o Seguinte: Vc usa um Server Socket para receber as conexoes dos ClienteSocket, Lembra um detalhe o seguinte:
Vc Define qual porta Ip ira trabalhar ai vc tera q fazer uma função para monitorar as conexoes pois vc irar enviar e receber daods correto (assincrone). Bom vou colocar um exemplo baisoc em baixo ai vou comentando ai acho q fica melhor pra vc entender:


//No Componente tServerSocket
procedure TDM.ServidorClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
var Numero : Integer;

begin
   //Um Pouco da Rotina para vc monitorar os Socket pois depois irei tirar a parte mais complicada de trabalhar com Socket
  I := 0;
  New(IDSocket); 
  Socket.Data := IDSocket; 
  Conexao.Add(Socket.data); 

end;

procedure TDM.ServidorClientDisconnect(Sender: TObject;
  Socket: TCustomWinSocket);
var NumeroConexao, I : Integer;
begin

   Try
     NumeroConexao := StrToInt(qryPesqConexaoNumeroSocket.value);
   except
     On EconvertError do

   end;

   With qryDelConexao do
   Begin
     Close;
     Params[0].value := IntToStr(NumeroConexao);
     ExecSQL;
   end;

   //Aki eu coloco a torina para subir ou descer os socket tem uma mais completa so q nao ta aki comigo e ela e bem estensa depois eu posto pra vc se vc quiser

   glbAberto := False;
    If Socket.Data <> nil Then
    begin
      NumConex := Conexao.IndexOf(Socket.Data);
      Conexao.Remove(Socket.Data);
      Dispose(Socket.Data);
    end;

end;

procedure TDM.ServidorClientError(Sender: TObject;
  Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
  var ErrorCode: Integer);
begin
   //Para nao deixar aparecer as msg do Windows pq se aparecer fica travado ate dar um Enter em OK
   errorCode := 0;
end;

procedure TDM.ServidorClientRead(Sender: TObject;
  Socket: TCustomWinSocket);

begin
 //Aki e a parte principal pq e aki q vc recebe as informações q os clientes estao te enviando eu utilizo um sleep pq minhas conexoes e via PC com Equipamento GPRS ai da um atrazo no envio mais acredito q PC para PC nao precisa usar esse Sleep.

    Sleep(130);
     GlbValor := Socket.ReceiveText; //funcao q vc recebe os valores ai vc depois trata e armazena em tabelas

end;

Bom pra vc mandar os dados do servidor para o cliente vc tem q saber em qual socket ele esta conectado por isso vc vai ter q fazer uma função para amarrar o numero do socket com o pc ou se nao vc envia todos os dados para todos os cliente conectados

Dm.Servidor.Socket.Connections[(NumeroSocket))].SendText(´Teste q ira enviar);



As conexoes trabalha da seguinte forma:
Computadores X,Y,Z e Servidor A

X Conecta em A = Socket 0
Y Conecta em A = Socket 1
Z Conecta em A = Socket 2

Se o Z Desconecta blz fica 0, 1, a proxima conexao tem q ser a de numero 2
volta tudo normal. 0, 1, 2
ai Y desconecta ai fica X = 0, Z = 1, ou seja se cair a conexao do meio ou do inicio elas tem q cair pros sockets de baixo sempre tem q ficar em fila (fila indiana)

Espero q tenho ajudado mais na net tem muitos artigos bons a respeito de socket


Responder

Gostei + 0

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

Aceitar