Sockets. Como definir uma conexão?

Delphi

23/05/2003

Tenho uma máquina server e alguns clientes.

Quando conecto as máquinas, vamos dizer que sejam 3.
No socket consta conexões ativas: 3

Conexão 0 : primeira máquina que logou
Conexão 1: segunda máquina que logou
Conexão 2: terceira máquina que logou

Se eu desconecto a segunda máquina que logou fica assim:
Conexão 0 : primeira máquina que logou
Conexão 1: terceira máquina que logou

Se eu desconecto a primeira máquina que logou fica assim:
Conexão 0: terceira máquina que logou

Isso me gera problemas na hora de desconectar uma determinada máquina pelo server, e também no meu listbox de refresh.


O que eu preciso saber é se tem como depois de as máquinas logadas, definir qual máquina vai estar em qual conexão.

Exemplo:
micro1 conexão 0
micro2 conexão 1
micro3 conexão 2
micro4 conexão 3
micro5 conexão 4


Latrodectrus

Latrodectrus

Curtidas 0

Respostas

Latrodectrus

Latrodectrus

23/05/2003

Se não for possível fazer isso agradeço se alguém der alguma sugestão, para resolver meu problema.


GOSTEI 0
Juan Basso

Juan Basso

23/05/2003

Estou passando o fim de semana na casa de meus pais, mas acho que tenho sua resposta em minha casa. Segunda ou terça é possível que eu lhe respoda.


GOSTEI 0
Rafael Heise

Rafael Heise

23/05/2003

Um dos sistema que já fiz, trabalhava com um programa Server, que era um serviço, e as máquinas logavam nele...
como fiz isso ... guardei uma lista das máquinas conctadas...
e ao verificar as conexões, não buscava simplesmente pela coneão, varria o array de conexões e pegava a máquina certa pelo seu ip, pois isso não muda !!! =D ...
abraços...
e depois, um for num array pra ver o ip é muitooo rapido ...
então .... não tem problema....


GOSTEI 0
Latrodectrus

Latrodectrus

23/05/2003

Valeu pela dica, mas acho que no meu caso não vai funcionar.

Pois trabalho com uma rede DHCP onde os ip são configurados automaticamente, mas o host de cada máquina é o mesmo.


GOSTEI 0
Rafael Heise

Rafael Heise

23/05/2003

Bom .. se o ip é configurado automaticamente.. mas na hora em que ele se loga na rede.. imagina se ele ficasse mudando de ip a toda hora.... mesmo DHCP , o ip é o mesmo quando você entra na rede, até o momento em que você sai ... pelo menos pelo que eu sei é assim .. ou eu to falando asneiras...
masss.. se o host é o mesmo .. .então usa o host...
=)
boa sorte...


GOSTEI 0
Pamploni Cadé

Pamploni Cadé

23/05/2003

Olá, amigo
Fiz um software para minha Lan house e me deparei com esse problema. Já o Resolvi.
Cara se você comprar o cod. fonte do meu software te dou todo o suporte para você resolver esse seu problema.

Desculpa se estou parecendo Mercenário!! Mas é que meu software, para o seu porte, está a preço de banana (R$35,00)

Se ficar interessado é só me passar um e-mail (pamploni@bol.com.br)


Sem mais

Pamploni Cadé


GOSTEI 0
Rafael Heise

Rafael Heise

23/05/2003

Na revista do clube delphi, trabalhando com sockets tem um exemplo bem fácil sobre isso ....
sobre utilização de sockets .....
mas se você quiser.. posso te passar um exemplo de chat que fiz em casa, que usava várias conexões pra conversarem, é o que você quer fazer... então ....
só me dá seu email ...
é de graça.. hehehehehe


GOSTEI 0
Luza

Luza

23/05/2003

E se vc colocar um ip fixo pra cada maquina usuario?

Talvez vc nao tivesse q se preocupar com o DHCP...


Desculpe a intromissao.


GOSTEI 0
Latrodectrus

Latrodectrus

23/05/2003

Luiza:
- não posso usar ips fixos por que é o meu modem que serve ips.(não tenho servidor de internet)


Zerneo:
-se puder agradeço muito, meu e-mail é latrodectrus@yahoo.com.br


GOSTEI 0
Latrodectrus

Latrodectrus

23/05/2003

desculpe LUZA e não luiza.


GOSTEI 0
Thaisandrade

Thaisandrade

23/05/2003

Não sei se já resolveu seu problema. Acho que a melhor forma de fazer isso é realmente criar um array e guardar nele um identificador para cada máquina que logar. Esse identificador pode ser o host mesmo, jpa que você usa DHCP, apesar que uma vez que um host tem uma concessão com o servidor DHCP ele vai pegar o mesmo IP até essa concessão terminar e quando está conectado à rede o IP não muda, ele só muda quando você desconectar e a concessão estover vencida, senão mesmo desconectando e conectando novamente o IP será o mesmo


GOSTEI 0
Paullsoftware

Paullsoftware

23/05/2003

[quote:4f99f7e816=´Pamploni Araújo Cadé´]Olá, amigo
Fiz um software para minha Lan house e me deparei com esse problema. Já o Resolvi.
Cara se você comprar o cod. fonte do meu software te dou todo o suporte para você resolver esse seu problema.

Desculpa se estou parecendo Mercenário!! Mas é que meu software, para o seu porte, está a preço de banana (R$35,00)

Se ficar interessado é só me passar um e-mail (pamploni@bol.com.br)


Sem mais

Pamploni Cadé[/quote:4f99f7e816]

Desulpem a ignorancia mais ai é [b:4f99f7e816]froid[/b:4f99f7e816], o fórum é para nos ajudarmos não para vender-mos nossos trabalhos em troca de favores... se não quizer ajudar não opine! :x


GOSTEI 0
Eixox

Eixox

23/05/2003

Eu desenvolvi uma ferramenta que funciona que nem um proxy local. Nessa ferramenta eu tinha um servidor que fornecia as atualizações para as diversas máquinas. Cada máquina que fazia uma conexão e verificava se havia atualizações, registrava seu IP (via DHCP) em StringGrid. Para cada Máquina eu tinha uma lista específica só para colocar as informações dela.

Então, faça o seguinte, na sua aplicação crie uma pequena variável que fica armazenada no registro. Defina uma valor para cada máquina e seu problema tá resolvido. Cada máquina que entrar em contato, mesmo com um ip diferente você saberá que é.

Isso resolveu o meu problema.


GOSTEI 0
Pain_elemental

Pain_elemental

23/05/2003

defina um identificador para cada máquina, ou para a sessão. Sempre que ela logar pela primeira vez, defina um identificador para ela. E faça com que no handshake ela passe esse identificador de volta para você. Assim você ganhará e muito em segurança, logging, restrições e tudo mais. Tipo, voce podera liberar por sessão ou por máquina, e poder definir quantas maquinas poderao usar o seu sistema ou quantas sessões simultâneas poderão existir, de forma mais prática.


GOSTEI 0
Thomaz_prg

Thomaz_prg

23/05/2003

Colega, se você usa ClientSocket e ServerSocket, ao invés de guardar a ordem das conexões, guarde o indice da conexão, para que seja possível se obter o controle de qual máquina se desconectou ou que se quer desconectar.
Supondo que você irá adicionar em um listbox as máquinas que estão se conectando, faça assim, no evento ClientConnect do server:

ListBox1.Items.Add( IntToStr(Socket.SocketHandle) );

No momento em que o cliente desconectar (evento OnClientDisconnect) coloque assim:

if ListBox1.Items.IndexOf( IntToStr(Socket.SocketHandle) ) >= 0 then
ListBox1.Items.Delete(ListBox1.Items.IndexOf( IntToStr(Socket.SocketHandle) ));

Ou seja, ao invés de ficar incrementando e decrementando, use o valor vindo de Socket.SocketHandle para saber quem se conectou e/ou desconectou. Esse valor é único para cada conexão, então dessa forma você manteria o controle tranquilo.


GOSTEI 0
POSTAR