Jump to content
BGUALTER

Chat multi user sem servidor

Recommended Posts

BGUALTER

Boas a todos,

Ando a desenvolver um chat, que tem como objectivos:

-poder ser usado numa rede privada,

-não usar de nenhum pc como servidor,

-todos os computadores se ligam a uma base de dados(SQL), através dela consigo obter endereço ip, lista de usuários.

-pretendo usar pacote de dados tipo tcp/ip

-o programa é multi user com uma sala geral e mensagens privadas

Problemas(para além de ser novato em programação nomeadamente VB :)

- A comunicação por socket neste caso como é feita?

um pc liga a outro através de 2 portas, uma para receber outra para enviar... mas e se forem 10's pc's?

cada pc reserva 20 portas para este tipo de chat de rede? ou o mm pc, recebe e envia para todos por essas portas, e distingue-os pelos ip's:

ou seja:

pc1 para pc2

XXX.XXX.XX1:8001 (porta saida)

pc1 para pc3

XXX.XXX.XX2:8001 (porta saída)

-A atribuição de portas pode ser feita manualmente ou tem que ser gerada pelo programa, detectando assim uma porta livre?

-No caso de receber msg's por determinada porta como a posso receber de forma automatica sem ter que usar um "timer" para ir checando as portas de entrada.

Eu procurei pela net e pelo site de um programa deste género e não obtive resultados positivos, ou encontro chat's peer to peer simples ou chats multi user mas baseados em servidor...

Agradecia a vossa ajuda  😳

Cmpts,

BGUALTER

Share this post


Link to post
Share on other sites
José Lopes

Espreita aqui...

http://www.portugal-a-programar.pt/forums/topic/0-find-topic/?do=findComment&comment=185568

Se tiveres alguma duvida podemos ir tocando ideias... a grande dificuldade que tive na altura foi a gestão de threads....

Penso que existe até uma api para fazer a parte da comunicação... http://www.jabber.org/


Quando te pedirem peixe.... ensina-os a Pescar!!Hum..lálálálá!!

Share this post


Link to post
Share on other sites
BGUALTER

Já estive  a ver esse codigo, e na essência n me ajuda mt, pq já consegui pôr codigo a funcionar por tcplistener, com msg's gerais e pm, o meu problema é q todos eles se baseiam em cliente/servidor, e eu quero criar 1 sem a necessidade de recorrer a um servidor...

Imaginemos uma rede de 3 ou mais pc's, o primeiro liga fica servidor, os outros ligam-se, mas e se o primeiro sair?

os outros, ficam sem comunicação...

Numa rede simples é mt necessário o servidor por causa de alguem escutar, por clientes e estabelecer conexão entre eles.

Mas no meu caso, eu tenho um servidor com BD sql q me cria registo de quem está on e n, e qdo está on nessa mm base de dados é criado um registo com 1 IP e pondero criar um registo tb de porta...

Logo, será mais fácil (em teoria) um chat sem necessidade de recurso a um chat tipo server/cliente...

Share this post


Link to post
Share on other sites
José Lopes

Se calhar não fui suficientemente explicito... tu mesmo que sejas apenas cliente.... vais ter que ser servidor para receber as mensagens, não? Ou seja... assumes as duas configurações...se não estivesses à escuta como é que sabias que havia mensagens novas???

A outra alternativa que vejo é com recurso à base de dados, manteres um sistema de mensagem que pode ser mais ou menos instantâneo, mas que assenta numa leitura de X em X tempo para ver se existem novas mensagens...

Pegando no exemplo que deste...quando uma máquina sai...tem que ir dizer aos outros todos...e nessa altura eu utilizei udp, que saiu... vai dizer a quem??? vai enviar para todos os IP's que estiverem logado na base de dados...


Quando te pedirem peixe.... ensina-os a Pescar!!Hum..lálálálá!!

Share this post


Link to post
Share on other sites
BGUALTER

Não tinha entendido dessa forma, sim, de facto cada utilizador é Servidor/Cliente.

Esse sistema de mensagens em servidor vai ser a segunda fase do programa, em que quando se envia uma msg e o utilizador n recebe, a msg é encaminhada para o servidor, e qdo o destinatário se ligar, recebe a/as msg's.

Eu estou a tentar n usar Udp para nada, tenho uma tabela com usuários e respectivos ips e portas de comunicação, o programa checa a base de dados e envia para todos os usuários ligados, uma vez que na base de dados há uma tabela especifica para saber quem está ligado e n..

o programa já corre perfeitamente (em P2P) utilizando tcp, neste momento estou a tentar suprimir o timer, através do evento DataArrival... mas até agora sem sucesso... alguém tem um ex. da aplicação do mm?

Share this post


Link to post
Share on other sites
José Lopes

A única observação, pelo que percebi é que tu nunca vais conseguir estabelecer uma ligação p2p porque o programa vai enviar para todos os utilizadores que estejam ligados... quanto à questão do data arrival, não conheço de todo....


Quando te pedirem peixe.... ensina-os a Pescar!!Hum..lálálálá!!

Share this post


Link to post
Share on other sites
BGUALTER

Como disse o programa já está a funcionar em P2P, tenho 2 pc's ligados em rede, e envio e recebo msg's perfeitamente, estou agora a pesquisar código para evento DataArrival q sei q existe para socket, e já vi a funcionar, mas quero para tcplistener, q o programa q estou a fazer trabalha com este último....

é um projecto em evolução e adaptação, vamos indo e vendo conforme as necessidades assim eu o vou adaptando...

Exemplo DataArrival para winsocket

http://msdn.microsoft.com/en-us/library/aa228046%28v=vs.60%29.aspx

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.