Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Rodrigo Miss

Socket

Recommended Posts

Boa tarde galera!Estou desenvolvendo um sistema de vendas, onde tm uma especie de chat interno do sistema, para o envio de recebimento de msg instantaneas entre usuarios conectados. Para isso estou usando TClienteSocket + TServerSocket. A duvida é o seguinte:Digamos q eu tenha uma lista com os nomes das maquinas conectadas (um listbox)1) Vamos supor q a Maquina "estacao1" manda uma mensagem pro Servidor, escolhendo nesse listbox q a mensagem deve ser repassada somente pra maquina "estacao4"... entao como faço pra q a mensagem seja enviada somente pra maquina selecionada nesse tal listbox???

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma das formas seria que no momento que enviar a mensagem, a mesma ser repassada para todos os clientes que estiverem online, mas somente o cliente que tiver o mesmo nome de usuário correspondente a mensagem vai poder ler, para os demais não iria aparecer no memo... Outra forma se não me engano poderia ser por ID de conexão, criar um esquema de n° de cada conexão ao serverSocket, e quando receber a mensagem, verificar de quem pertence o ID e disparar a mensagem somente para aquele...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso o seu servidor de mensagens vai precisar sempre fornecer, no caso quando se conectar, no servidor teria que guardar em uma lista os online, e sempre que tiver nova conexão, é passado a listagem, podendo assim manter atualiza a lista dos ativos...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Marcio!.... to fazendo um pequeno exemplo aki pra ver c funciona. Por enquanto o code da da seguinte forma:

 

Server:

 

var  frmServidor: TfrmServidor;  Conexao: string;
procedure TfrmServidor.ServidorClientRead(Sender: TObject;  Socket: TCustomWinSocket);begin  mmConn.Lines.Add('Recebido ' + Socket.ReceiveText);end;procedure TfrmServidor.ServidorAccept(Sender: TObject; Socket: TCustomWinSocket);begin  conexao:=  Conexao + '*' + (IntToStr(Servidor.Socket.ActiveConnections) + '-' + Socket.RemoteHost);  mmConn.Lines.Add(conexao);  Socket.SendText('ListaOn-' + conexao);end;
Cliente:

procedure TfrmCliente.ClienteConnect(Sender: TObject; Socket: TCustomWinSocket);var  Id, Texto, Msg, aux: string;  i: integer;  lst: TStrings;begin  Msg:= Socket.ReceiveText;  Id:= Copy(Msg,1,Pos('-',Msg) -1);  Texto:= Copy(Msg, Pos('-', Msg) + 1, Length(msg));  if (Id = 'ListaOn') then  begin	lst:= TStringList.Create;	for i:= 1 to Length(Texto) do	begin	  if (Texto[i] <> '*') then	  begin		aux:= aux + Texto[i];	  end	  else	  begin		lst.Add(aux);		aux:= '';	  end;	end;	if (aux <> ' ') then	begin	  lst.Add(aux);	end;	lst.Text:= Trim(lst.Text);	CheckListBox.Items.Assign(lst);	lst.Free;	exit;  end;end;

Até ai ta td certo kra,,, ele funciona beleza! o problema é q digamos q tenha 3 clientes conectados ao Server, e de repente o cliente2 se desconecta, dai bagunça td a lista do online ... ja tentei fazer um tratamento no onClientDisconect do servidor mais naum deu resultado. Conto com sua colaboraçao....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando alguém desconectar, antes dele desconectar, faz com que envie uma mensagem para o server informando da sua saída, e então o server recebe a solicitação, remove, e repassa a lista para os clientes on-line.

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim Marcio, eu ja pensei em fazer issu kra.... o problema é q eu naum to conseguindo axar uma forma de me referencia aos clientes corretamente....tipow eu pensava em mandar o cliente enviar uma mensagem ao servidor, avisando q esta desconectando tipow assim:Socket.SendText('sair' + meuIDdeConexao)....dai daria certo,,, mais o problema é como saber o id do cliente conectado??? você ta conseguindo me entender?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Lhe entendi... Já desenvolvi este esquema usando socket, e foi assim mesmo que fiz, foi enviando uma mensagem solicitando a saída ao servidor, usei como ID de controle o handle de conexão existente...

Compartilhar este post


Link para o post
Compartilhar em outros sites

bah kra... to sofrendo nessa heheheheekra ... me da uma explicada aew ,,,, como você fez no cliente e no server, no momento em q o cliente se conecta???? como você fez o controle pra enviar a mensagem somente pra um determinado usuario??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, no servidor criei um record com a listagem de clientes, quando o mesmo pede conexão, ele é adiciona nesta listagem, onde fica o nome, socket, ip, handle, etc... Quando pede para enviar uma mensagem para outro user, ele procura dentro deste record pelo nome, pega o handle, varre as conexões ativas até achar o handle correspondente e faz o envio...

Compartilhar este post


Link para o post
Compartilhar em outros sites

putz !!!!!lasco td msm kra.... naum consigo fazer issu!!!!você naum tm nenhum exemplo aew,,, ou por o code aki ... algo parecido ...pq nunca mexi com socket antes .... ta dureza kra.. da mais uma força aew rs

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.