BGUALTER Posted April 20, 2012 at 01:34 PM Report #450171 Posted April 20, 2012 at 01:34 PM 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
José Lopes Posted April 20, 2012 at 10:19 PM Report #450331 Posted April 20, 2012 at 10:19 PM 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á!!
BGUALTER Posted April 23, 2012 at 08:51 AM Author Report #450660 Posted April 23, 2012 at 08:51 AM 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...
José Lopes Posted April 24, 2012 at 06:31 PM Report #451212 Posted April 24, 2012 at 06:31 PM 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á!!
BGUALTER Posted April 27, 2012 at 11:25 AM Author Report #451740 Posted April 27, 2012 at 11:25 AM 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?
José Lopes Posted April 27, 2012 at 01:03 PM Report #451756 Posted April 27, 2012 at 01:03 PM 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á!!
BGUALTER Posted April 27, 2012 at 02:05 PM Author Report #451776 Posted April 27, 2012 at 02:05 PM 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
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now