Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Comunicação entre PCs em uma rede


Guest José Da Silva

Pergunta

Guest José Da Silva

Caros amigos,

Gostaria de controlar uma Matriz (Interface), estando vários utilizadores em rede. Na prática seria um servidor dedicado onde se encontra a Matriz ligada, e os outras estações poderiam aceder por tcp/ip e, desta forma cada um seleccionava o ponto da Matriz desejada. É possível faze-lo com Delphi? Algum exemplo?

Para terminar, uma grande abraço ao amigo Micheus,

MC

José

Moçambique

Link para o comentário
Compartilhar em outros sites

  • Respostas 69
  • Created
  • Última resposta

Top Posters For This Question

Posts Recomendados

  • 0

Há quanto tempo heim?!

Bom te "ver" por aqui outra vez. :)

Gostaria de controlar uma Matriz (Interface), estando vários utilizadores em rede. Na prática seria um servidor dedicado onde se encontra a Matriz ligada, e os outras estações poderiam aceder por tcp/ip e, desta forma cada um seleccionava o ponto da Matriz desejada. É possível faze-lo com Delphi? Algum exemplo?
José, se entendi direito você quer controlar um dispositivo eletrônico (esta Matriz) que está ligada ao servidor? Seria isto?

Sobre a questão, você teria que criar um programa Servidor para receber as requisições/instruções e um programa Cliente para conectar-se a este servidor e enviar/receber os dados. Isto poderia ser feito com sockets.

Estes posts podem ser úteis:

- Tclientsocket E Tserversocket, Delphi 7 - Cadê esses componentes?

- Record / Socket, Enviar records através de socket TCP

- Preciso De Uma Dica Sobre Sockets!

- Como Mandar Texto Via Serversocket Clientsocket?

Abraços.

Link para o comentário
Compartilhar em outros sites

  • 0
Guest José Da Silva

Aí Micheus,

É verdade, algum tempo fora e dá no que dá. Mas é sempre um prazer voltar ao Fórum e rever os amigos "virtuais".

Quanto a dúvida, vou ler as tuas sugestões e logo, logo, farei o feedback.

Um abraço

MC

José

Moçambique

Link para o comentário
Compartilhar em outros sites

  • 0

José, por questão de organização, desmembrei seu último post deste tópico por tratar de outro assunto, (apesar de o projeto ser o mesmo - eu sei).

Neste post você dá continuidade a discusão sobre a comunicação entre os PC's na rede - via socket (p.e.)

E neste novo - Comunicação via porta serial - discutiremos a questão de acesso a porta serial para configuração da sua matriz-display.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Boa noite para todos,

Agora surge-me uma duvida (+++outra....enfim!): Será que se eu criar um Servidor usando sockets, poderei fazer com que todos os 8 Pc´s que estão em rede comuniquem com a minha Matriz? Que aconteceria se hipoteticamente houvesse um pedido simultâneo de um ou mais clientes? Em todo o caso como definir os clientes e como endereça-los para a Matriz?

Aquele abraço

José

Link para o comentário
Compartilhar em outros sites

  • 0
Agora surge-me uma duvida (+++outra....enfim!): Será que se eu criar um Servidor usando sockets, poderei fazer com que todos os 8 Pc´s que estão em rede comuniquem com a minha Matriz? Que aconteceria se hipoteticamente houvesse um pedido simultâneo de um ou mais clientes? Em todo o caso como definir os clientes e como endereça-los para a Matriz?

Agregando a este seu comentário o que você já colocou lá no outro post, visto que passaremos a tratar da questão da comunicação entre PC's:

A questão agora é mais bicuda: Como fazer com que os clientes (8 na totalidade), consigam comutar e de forma a não escolherem os mesmos pontos? Uma vez que a Matriz tem apenas uma entrada RS232, que ira estar ligado ao suposto Server, como fazer com que os outros clientes consigam aceder a Matriz? Imaginei que criando uma aplicação do lado do servidor, pudesse através de instruções dos clientes, seleccionar os pedidos. Desta forma, para além de conseguir que os pedidos não se repitam, funcionaria como um "midleware" entre os clientes e a matriz.... mas como fazer isso???!! Será uma ideia viável ou exequível?

José, este seu server deverá gerenciar uma lista de solicitações, o que não tem nada de complicado: chegou a requisição, pões na lista. Depois, o processamento a partir desta lista é feito por ordem de chegada, ou seja, as mais antigas atendidas primeiro.

Poderia ser por ai o caminho?

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

José, vai anexo um exemplo que talvez lhe ajude. Ele consiste de dois programas: um Server e outro Client.

Já estão no anexo, os executáveis, mas se abrir os projetos fontes e receber mensagem de que não foram encontrados os componentes socket, clique em "Ignore" e saia do projeto sem salvá-los. Em seguida proceda a instalação dos componentes:

No menu Components->Install packages, botão "Add..." localiza a pasta "Bin" no diretório de instação do Delphi, nela você deve encontrar o arquivo "dclsockets70.dcl" - Selecione-o para instalação.

O Server simula um programa que mostra em um letreiro o texto enviado pelos programas Client. Quando o Server recebe os texto, estes são tratados de modo que aparecendo as iniciais "CMD:", ele entende que o texto na sequencia é o conteúdo a ser mostrado no display. Já se não contiver, é apenas uma mensagem qualquer sendo trocada entre Client e Server, sendo que apenas é adicionada ao log (memo).

No Client, faz necessário informarmos o nome do servidor ao qual queremos nos conectar. Eu implementei apenas o uso do "Host Name" (propriedade Host), mas poderia ser feito uso de endereço IP (propriedade Address).

A simulação do envio de mensagem fica por conta de um Timer que viabizará o envio de 5 mensagens ao servidor.

Para testar, você pode executar tudo em um só compudador - não há problemas. Sugiro que execute o servidor e duas instâncias do client.

Faça toda a combinação de testes possíveis. Voce observará que estando todos conectados, ao desconectar o Server, automaticamente os Client passarão ao modo desconectados. Que a cada server conectado ao server, sua informação será mantida em uma lista de clients (ComboBox) onde inclusive o Socket desta conexão é guardada para que possamos enviar mensagem para qualquer client na lista.

A troca de texto entre Server e Client é feito através de uma caixa de texto e botão de envio.

A lista de comandos a serem executados pelo server, é armazenada num ListBox em tela, logo se o programa for encerrado, não há como continuar com a lista de onde ela estava. Se coisa deste tipo for necessária, talvez seja conveniente utilizar, então, uma tabela para armazenar os comandos para posterior utilização.

Espero que você consiga dar um start no seu projeto.

Abraços

Socket_Demo.zip

Editado por Micheus
Corrigido exemplo em anexo.
Link para o comentário
Compartilhar em outros sites

  • 0

Ola companheiros,

Tenho uma dúvida que em princípio pode parecer simples mas não consigo implementar eficazmente.

Preciso comparar a string do ReceivedCmd := Socket.ReceiveText; com as strings depositadas no Memo2 - Memo2.Lines.Add(Copy(ReceivedCmd, 5, Length(ReceivedCmd)));.

Sei que existe a função AnsiSameText mas não estou a ver uma saida eficaz.

Isto porque quero fazer com que os clientes que enviem os comandos (Hex para a Matriz), seja primeiros comparados com os que se encontram no Memo2 e só depois serão aceites...para evitar deste modo que se seleccione o mesmo Source e Destination

Espero ter sido claro...

Aquele Abraço

José

Link para o comentário
Compartilhar em outros sites

  • 0
Sei que existe a função AnsiSameText mas não estou a ver uma saida eficaz.

Isto porque quero fazer com que os clientes que enviem os comandos (Hex para a Matriz), seja primeiros comparados com os que se encontram no Memo2 e só depois serão aceites...para evitar deste modo que se seleccione o mesmo Source e Destination

José, não ficou-me bem claro o que você estará monitorando no memo2. Mas, se a questão é verificar a existência de um fragmento de texto nas linhas de um memo, acho que você pode utilizar algo como:

if AnsiContainsText(Memo2.Lines.Text, <texto a procurar>)  then
  <contém texto>
else
  <não contém>

A função que você citou (AnsiSameText) verifica se os textos são iguais, e não se um sub-texto existe em outro.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Boa Madrugada Micheus,

Acontece que o texto a procurar esta no ReceivedCmd := Socket.ReceiveText;.

Eu explico: Imagina que um cliente manda para o server um comando. Este comando é recebido pelo Socket.ReceiveText e guardado na variável ReceiveCmd. Acontece porem que eu quero comparar este comando (que será em Hex), com os comandos já recebidos e armazenados no Memo2. Se forem iguais ele recusa, senão ele manda para a Matriz...

Espero ter sido mais claro.

Abraço

José

Link para o comentário
Compartilhar em outros sites

  • 0

José, supondo que este comando que você recebe você o adiciona no memo, não haveria qualquer problema em utilizar o tal método (procurar pela substring).

Mas também poderia utilizar (se é que realmente você adiciona um comando por linha, e este memo tenha ReadOnly=true), o método IndexOf da propriedade Lines.

Supor o memo com (uma sequencia em cada linha):

$01$05$07$03$07

$04$06$09$03$08

$02$05$09$05$01

$07$08$07$01$03

$06$05$03$01$05

Novo comando recebido: ???? $07$06$03$01$03

então, de acordo com a instrução Copy, deveria ser inserido no memos apenas a sequencia: $07$06$03$01$03

O teste para verificar a existência poderia ser feito assim:

if Memo2.Lines.IndexOf(Copy(ReceivedCmd, 5, Length(ReceivedCmd))) = -1 then
  Memo2.Lines.Add(Copy(ReceivedCmd, 5, Length(ReceivedCmd)));
Como no conteúdo do memo2 exemplificado a sequencia não existi, ela deverá ser inserida e ficar: $01$05$07$03$07 $04$06$09$03$08 $02$05$09$05$01 $07$08$07$01$03 $06$05$03$01$05 $07$06$03$01$03 A título de reduzir processamento e simplificação, eu sugeriria que você utilizasse uma variável local para processar a sequencia:
HexaValue := Copy(ReceivedCmd, 5, Length(ReceivedCmd));
if Memo2.Lines.IndexOf(HexaValue) = -1 then
  Memo2.Lines.Add(HexaValue);

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Ola Micheus,

Veja por favor este código:

var

Idx :Integer;


begin

   // se há comandos a processar...

    if ListBox1.Count > 0   then

    begin
Envia para todos os clientes
for Idx := 1 to ComboBox1.Items.Count -1 do
   (ComboBox1.Items.Objects[Idx] as TCustomWinSocket).SendText(Listbox1.Items[0]);
Só que aqui eu queria comparar com o que existe no Memo2 e só enviaria se de facto não houvesse repetição... ComboBox1 selecciona o cliente; Listbox1 recebe os comandos e depois são enviadas para todos eles de acordo com a posição do ComboBx1;
ListBox1.Items.Delete(0);   // elimina comando da lista


       end
   
end;

end.

Na Pratica o código que me enviastes faz com que não haja repetição no Memo2 - o que já é uma grande ajuda evitando linhas enormes...

Aquele abraço

José

Link para o comentário
Compartilhar em outros sites

  • 0

Ola Micheus e Boa noite companheiros do Forum,

Consegui resolver a questão:

if  AnsiContainsText( Memo2.Lines.Text,ReceivedCmd)  then
Eu tinha trocado ,
if  AnsiContainsText( ReceivedCmd, Memo2.Lines.Text,)  then

Vou verificar o resto a procura de bugs...

Aquele abraço

José

Link para o comentário
Compartilhar em outros sites

  • 0

Tenho um pequeno bug: A função AnsiContainsText verifica se existe letras no texto e não o texto inteiro.Assim, se tiver AAAA22 e digitar novamente AAAA22 ele diz que já existe; Se retiramos uma das letras AAAA2 ex. ele continua a dizer que é repetido...?! e assim sucessivamente....

Inté....

Link para o comentário
Compartilhar em outros sites

  • 0

Boa Noite companheiros,

Estou com uma pequena dificuldade onde qualquer ajuda seria bem vinda:

Estou a enviar um comando Hexa AA5503071F para um ListBox e acontece que ela converte em Char ªU. Este comando é depois reenviado e aí ele volta a converter em Hexa. O que eu queria é que ele continuasse a ser lido quer no ListBox , ou no Memo em Hexa e fosse reenviado em Hexa.

Da para dar uma ajuda?

Abraço

José

Africa

Link para o comentário
Compartilhar em outros sites

  • 0

Boa Tarde companheiros,

Estou tentando comparar duas strings usando o seguinte código:

if  AnsiContainsText((Copy(ReceivedCmd, 10, Length(ReceivedCmd))),LBox1.Items.Text)   then

  begin
    ListBox1.Items.Add(Copy(ReceivedCmd, 10, Length(ReceivedCmd)));
    ListBox1.ItemIndex := ListBox1.Count -0;

Acontece que não esta surtindo efeito.... não compara coisa alguma!

Alguma ideia?

Aquele abraço

José

Link para o comentário
Compartilhar em outros sites

  • 0

Ilustres companheiros,

Apenas uma pequena nota informando e, de certa maneira, alertando para a complexidade (ciclomática) do código, onde poderá originar erros de sintaxe, e se nos descuidarmos com os if´s, begins e ends, podemos até alimentar alguns bugs difíceis de encontrar - foi o meu caso.

Entretanto ficam alguma dúvidas que subsistem e que, se puderem contribuir, seria maravilhoso. São elas em relação ao facto de, nos Memos, LBoxes e Edites, converter os valores Hexas recebidos para Char, complicando de sobremaneira as coisas e, outra tem a haver com o facto de não conseguir comparar uma Sting - ex. no LBox - com outras nos outros LBox , Edits etc. Isto porque só consegui comparar eficazmente 2 strings!!! Comparar uma string com várias outras fica difícil.

A solução passaria eventulamente - e isto para evitar as montanhas de IF´s, por alguma função(!?) ....

Toda a ajuda é bem vinda...

Aquele abraço

José

O Africano

Link para o comentário
Compartilhar em outros sites

  • 0
Entretanto ficam alguma dúvidas que subsistem e que, se puderem contribuir, seria maravilhoso. São elas em relação ao facto de, nos Memos, LBoxes e Edites, converter os valores Hexas recebidos para Char, complicando de sobremaneira as coisas e, outra tem a haver com o facto de não conseguir comparar uma Sting - ex. no LBox - com outras nos outros LBox , Edits etc. Isto porque só consegui comparar eficazmente 2 strings!!! Comparar uma string com várias outras fica difícil.
José, para facilitar na compreensão de seu problema, eu pediria que você colocasse aqui um exemplo de um destes cenários por você apontado. Ou seja, uma condição inicial (onde já existem alguns itens nas listas), uma condição em que um item será adicionado (o texto a ser processado) e o resultado esperado. Seria ainda conveniente que você colocasse as procedures envolvidas nesta questão (não precisa ser completa, mas a parte que envolve estas listas, memos e edits que você citou).

Com isto, ficaria mais fácil simular o que você tem aí, e tentar achar uma sugestão por aqui. ;)

Dica

O código abaixo pode ser simplificado uma vez que o método Add retorna a posição em que o texto foi adicionado. Logo, ele passaria de:

ListBox1.Items.Add(Copy(ReceivedCmd, 10, Length(ReceivedCmd)));
ListBox1.ItemIndex := ListBox1.Count -0;
para:
ListBox1.ItemIndex := ListBox1.Items.Add(Copy(ReceivedCmd, 10, Length(ReceivedCmd)));

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Ola Micheus,

Bom te ler....

Bem, cá vai a ideia que pretendo para o servidor. Na prática com a solução destes problemas poderia já começar a testa-lo.

Nesta snapshot esta a imagem parcial do servidor onde podera ver os campos com os comandos dos clientes recebidos:

server1sz9.th.png

A ideia é que nos campos do LBox1, LBox2, ..., LBox8 os valores não se repitam, ou seja, jamais podem ser iguais...

O Código não esta completo porque falta esta opção:

if Pos('Cliente1', ReceivedCmd) = 1 then
 Begin
 LBox1.Clear;
 LBox1.Items.Add(Copy(ReceivedCmd, 10, Length(ReceivedCmd)));

 end;

 if Pos('Cliente2', ReceivedCmd) = 1  then
 begin
 LBox2.Clear;
 LBox2.Items.Add(Copy(ReceivedCmd, 10, Length(ReceivedCmd)));
 end;

  if Pos('Cliente3', ReceivedCmd) = 1  then
 begin
 LBox3.Clear;
 LBox3.Items.Add(Copy(ReceivedCmd, 10, Length(ReceivedCmd)));//...até ao 8º
 end;
...por ai fora ate completar o 8ºCliente... Mas como pode observar os códigos repetem-se...(naturalmente por falta de sintaxe adequada). Agora quanto a seguinte imagem, server2li1mr2.th.jpg O que se pretende é que ele compare o código recebido no LBox1, LBox2,...,LBox8 de forma a que se forem repetidos ele rejeite. Consegui fazer isso apenas comparando com um LBOx1. Se tento que ele compare com mais do que um não surte efeito. O código
if not AnsiContainsText(Comparador.Lines.Text, LBox2.Items.Text) then

  begin

    Comparador.Clear;
    Comparador.Lines.Add(HexaValue);

    ListBox1.Items.Add(Copy(ReceivedCmd, 10, Length(ReceivedCmd)));
    ListBox1.ItemIndex := ListBox1.Count -0;
    Comparador.Refresh;
 end;
Veja que neste código, uma vez comparado com o LBox1 e senão for repetido será adicionado ao ListBox1 que por sua vez tem um timer que faz um delay (por causa do hardware), permitindo depois enviar para todos os clientes...
if ListBox1.Count > 0 then
    begin

    for Idx := 1 to ComboBox1.Items.Count -1 do
   (ComboBox1.Items.Objects[Idx] as TCustomWinSocket).SendText(Listbox1.Items[0]);

    Setup.ComPort1.WriteStr(ListBox1.Items.Text);

    ListBox1.Items.Delete(0);  { elimina comando da lista   }

Acontece porem que só consigo que ele compare eficazmente coma apenas um LBox, e, quando tento que a comparação com os outros não resulta. Da mesma forma nos LBox1,2,...,8, não consigo eficazmente que ele não se repita.

Por fim tenho o tal problema de os códigos em Hexa vindos dos Clientes serem convertidos (??) para Char dentro dos ListBox ou Memos....

Um Abraço e mais uma vez obrigado pela ajuda incomensurável.

José

Link para o comentário
Compartilhar em outros sites

  • 0
Nesta snapshot esta a imagem parcial do servidor onde podera ver os campos com os comandos dos clientes recebidos:

server1sz9.th.png

A ideia é que nos campos do LBox1, LBox2, ..., LBox8 os valores não se repitam, ou seja, jamais podem ser iguais...

O Código não esta completo porque falta esta opção:

if Pos('Cliente1', ReceivedCmd) = 1 then
 begin
   LBox1.Clear;
   LBox1.Items.Add(Copy(ReceivedCmd, 10, Length(ReceivedCmd)));
 end;

 if Pos('Cliente2', ReceivedCmd) = 1  then
 begin
   LBox2.Clear;
   LBox2.Items.Add(Copy(ReceivedCmd, 10, Length(ReceivedCmd)));
 end;

 if Pos('Cliente3', ReceivedCmd) = 1  then
 begin
   LBox3.Clear;
   LBox3.Items.Add(Copy(ReceivedCmd, 10, Length(ReceivedCmd)));//...até ao 8º
 end;
...por ai fora ate completar o 8ºCliente... Mas como pode observar os códigos repetem-se...(naturalmente por falta de sintaxe adequada).
José, uma vez que os LBoxn são limpos a cada comando recebido, ou seja, mantém apenas o último comando recebido, porque que é que você não utiliza apenas um TEdit? Isto supostamente poderia simplificar o processo de comparações, já que pelo que entendi, você deverá comparar um valor com o outro para que não existam iguais.
O que se pretende é que ele compare o código recebido no LBox1, LBox2,...,LBox8 de forma a que se forem repetidos ele rejeite. Consegui fazer isso apenas comparando com um LBOx1. Se tento que ele compare com mais do que um não surte efeito. O código
if not AnsiContainsText(Comparador.Lines.Text, LBox2.Items.Text) then
  begin
    Comparador.Clear;
    Comparador.Lines.Add(HexaValue);

    ListBox1.Items.Add(Copy(ReceivedCmd, 10, Length(ReceivedCmd)));
    ListBox1.ItemIndex := ListBox1.Count -0;
    Comparador.Refresh;
 end;

Veja que neste código, uma vez comparado com o LBox1 e senão for repetido será adicionado ao ListBox1

E no ListBox1 estarão os comandos a serem enviados para a porta. Certo?!

Eu só não entendi, direito a função do Comparador, uma vez que não existindo o texto nele no LBox2, você o limpa e adiciona um novo valor. Mas a comparação não deveria ser feita com os demais LBoxn? :unsure:

Por fim tenho o tal problema de os códigos em Hexa vindos dos Clientes serem convertidos (??) para Char dentro dos ListBox ou Memos....
Tenho um pequeno bug: A função AnsiContainsText verifica se existe letras no texto e não o texto inteiro.Assim, se tiver AAAA22 e digitar novamente AAAA22 ele diz que já existe; Se retiramos uma das letras AAAA2 ex. ele continua a dizer que é repetido...?!
É, realmente parece que temos um bug com a função, inclusive a função AnsiContainsStr (que é uma versão case-sensitive) apresenta o mesmo problema.

Mas podemos contornar de outros modos.

Se você está armazenando os valores em caixa alta, por ex., não há maiores preocupações e podemos substituir pela função AnsiPos:

if AnsiPos(Edit1.Text, Memo1.Lines.Text) > 0 then

caso contrário, devemos garantir que os textos comparados tenham o mesmo "case"

if AnsiPos(AnsiUpperCase(Edit1.Text), AnsiUpperCase(Memo1.Lines.Text)) > 0 then

Estou a enviar um comando Hexa AA5503071F para um ListBox e acontece que ela converte em Char ªU. Este comando é depois reenviado e aí ele volta a converter em Hexa. O que eu queria é que ele continuasse a ser lido quer no ListBox , ou no Memo em Hexa e fosse reenviado em Hexa.
Bom, isto está ocorrendo porque você está convertendo o valor hexa para char. Por ex., $AA é o valor decimal do caracter ª. Então, este comando tem que ir no formato string para o listbox. A sua conversão para código ascii, na seqüência de caracteres, só terá que ser enviada para a porta de comunicação. Não seria isto?

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Ola Companheiros,

Viva Micheus,

José, uma vez que os LBoxn são limpos a cada comando recebido, ou seja, mantém apenas o último comando recebido, porque que é que você não utiliza apenas um TEdit?

Isto supostamente poderia simplificar o processo de comparações, já que pelo que entendi, você deverá comparar um valor com o outro para que não existam iguais.

A questão é que se eu uso apenas um TEdit, como irei apagar os comandos apenas de um determinado cliente que envia? Ou seja o cliente envia um comando, se existir já um em seu nome ele devera apagar e substituir pelo novo... mas não os comandos dos outros clientes. Por isso criei a LBox(n), para tratar cada casa separadamente. De outra forma como seria? Aceito soluções...

E no ListBox1 estarão os comandos a serem enviados para a porta. Certo?!
Certo! E é substituido sempre pelo novo comando que chega dos cliente...desde que não seja repetido.

Eu só não entendi, direito a função do Comparador, uma vez que não existindo o texto nele no LBox2, você o limpa e adiciona um novo valor. Mas a comparação não deveria ser feita com os demais LBoxn?

Exactamente. Mas quando tento comparar com os demais LBox's não funciona. Ou seja , funciona apenas se comparar com um único... ou estou fazendo algo de errado!

Bom, isto está ocorrendo porque você está convertendo o valor hexa para char. Por ex., $AA é o valor decimal do caracter ª. Então, este comando tem que ir no formato string para o listbox. A sua conversão para código ascii, na sequência de caracteres, só terá que ser enviada para a porta de comunicação. Não seria isto?
Mas eu não quero converter! Como faço?

E isto complica também as comparações que devo fazer nos Momos e LBox, etc...

Aquele Abraço

José

Link para o comentário
Compartilhar em outros sites

  • 0

Boa Noite Companheiros,

Viva Micheus,

Criei um código que funciona usando a tua ideia do TEdit. Fiz em TMemo, mas só funciona perfeito para um Cliente e sem repetir a linha. Quando mudo de comando ele substitui a Linha por outro comando novo. O Problema é usa-lo para o restantes cliente. Você pode testa-lo como SocketDemo que me mandou. Usei o comando (ex.) AA55030201...

if Memo2.Lines.IndexOf(Copy(ReceivedCmd, 10, Length(ReceivedCmd))) = -1 then
if Pos('Cliente1', ReceivedCmd) = 1  then
  begin
  Memo2.Clear;
   Memo2.Lines.Add(Copy(ReceivedCmd, 10, Length(ReceivedCmd)));

  end;

Como fazer para os restantes? Tentei os outros clientes so que quando mudo o Cliente1 ele apaga tudo no Memo2...

Abraço

José

Link para o comentário
Compartilhar em outros sites

  • 0

Se eu uso tento com dois clientes ele usa sempre a mesma linha...o que estraga tudo:

if Memo2.Lines.IndexOf(Copy(ReceivedCmd, 10, Length(ReceivedCmd))) = -1 then
if Pos('Cliente1', ReceivedCmd) = 1  then
  begin
  Memo2.Clear;
   Memo2.Lines.Add(Copy(ReceivedCmd, 10, Length(ReceivedCmd)));

  end;

  if Memo2.Lines.IndexOf(Copy(ReceivedCmd, 10, Length(ReceivedCmd))) = -1 then
if Pos('Cliente2', ReceivedCmd) = 1 then
  begin
  Memo2.Clear;
   Memo2.Lines.Add(Copy(ReceivedCmd, 10, Length(ReceivedCmd)));

  end;

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.




  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...