Fórum Socket Assíncrono #351962
16/01/2008
0
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
Curtir tópico
+ 0Posts
17/01/2008
Massuda
Gostei + 0
17/01/2008
Lucaoliveira
Gostei + 0
17/01/2008
Massuda
Gostei + 0
17/01/2008
Marcal
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
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)