Chat com sockets

13 respostas
H

Rpz tava estudando sockets e tive a ideia q fazer 1 chat peer-to-peer, so q eu me enrrolei como fazer, eu acho q terei q rodar um cliente (q envia as msgs) e um servidor (q recebe e mostra as msgs) em ambos os “lados”, so q como eu farei p rodar 2 programas ao mesmo tempo e fazer a comunicacao entre eles? Sera q terei de usar treads? Alguem me dar 1 luz ai, possa ser q tenha outra ideia mais facil. O codigo q irei usar no cliente e no servidor será mais ou menos este: http://www.guj.com.br/posts/list/35366.java

Vlw.

13 Respostas

kuchma

Voce esta imaginando um chat “descentralizado”, digamos assim, certo?

Voce pode iniciar duas threads em cada maquina, uma pra ser o “servidor” e mandar as mensagens providas pelo usuario via alguma GUI (interface com usuario - tela grafica, console, etc) e outra pra ser o “cliente” e receber as mensagens da outra pessoa, exibindo-as na GUI tambem.

A principio as duas threads nao precisariam se comunicar, elas trabalhariam de forma independente, certo? Mas, entretanto, contudo, todavia, se voce precisar disso, voce pode usar varios tipos de comunicacao - em se tratando de duas threads Java sob seu controle, o mais simples eh atraves de alguma variaveis publica, que ambas as threads tenham acesso (no caso entra em cena o cuidado com sincronismo e afins).

Marcio Kuchma

H

to tentando fazer sem treads sera q consigo?

kuchma

Hehehe - sem disparar mais de uma thread talvez voce consiga, agora, sem utilizar nenhum recurso associado a threads (wait/notity, sincronismo, etc) acho dificil. :slight_smile:

Explicando: voce poderia ter uma thread que fizesse ambas as tarefas - teria apenas que definir uma politica pra coordenar isso: envia um pouco, recebe um pouco; ou entao recebe ate que tenha algo pra enviar, algo assim.

Mas claro, isso vai depender da maneira como voce decidir fazer. Mas por que nao utilizar duas threads?

Marcio Kuchma

H

pq sou newbie em treads, vo ter q dar 1 olhada como funciona caso eu keira fazer c treads, caso eu n consiga, vou apelar p treads, vlw :smiley:

kuchma

Voce poderia fazer tres programas independentes (cliente, servidor, GUI) que se comunicassem via (exemplo) arquivos de texto. Mas isso eh muito bizarro. As threads estao ai pra isso. Otima desculpa pra voce aprender mais do assunto. :smiley:

H

Ae consegui fazer sem threads e sem arquivos e n ficou sebosao nao, eu pelo menos nao achei, dps posto o codigo p vcs darem 1 olhada, flw

Proteu_Alcebidiano

o link all about sockets do java tutorial ensina vc a fazer isso :slight_smile: o resto segue daí

http://java.sun.com/docs/books/tutorial/networking/sockets/index.html

H

bom tutorial, agora eu aprendi q n era necessario criar 1 cliente e 1 servidor p kd lado remoto p fazer meu chat, como eu fiz :confused:

tanto o cliente quanto o servidor podem receber e enviar msgs :confused:

kuchma

hlds:
bom tutorial, agora eu aprendi q n era necessario criar 1 cliente e 1 servidor p kd lado remoto p fazer meu chat, como eu fiz :confused:

tanto o cliente quanto o servidor podem receber e enviar msgs :/

Voce nao precisa ter um cliente e um servidor em cada maquina, mas voce precisara de uma thread para receber e outra para enviar mensagens. Exceto se for algo muito simples como o KnockKnock do exemplo (conversa sequencial - cliente fala, servidor responde, cliente fala…).

Em todo caso posso estar enganado - faz tempo que nao mexo com sockets. Coloque teu codigo ai pra ver como ficou. Como voce fez pra aguardar mensagens do usuario e ao mesmo tempo ver se chegou mensagem do outro lado sem forcar uma sequencia? [color=blue][editado: talvez os novos recursos de IO nao-bloqueante do JDK 1.5 sejam uma opcao (nao sei, pois nao estudei estes recursos) - vide pacote java.nio.channels][/color]

Marcio Kuchma

H

eu so testei localmente, vo ve se testo em maquinas separadas p ve como ta se saindo, e ai eu posto o codigo.

mas em geral eu deixei 1 while(true) no main(), que vai ficar escutando msgs recebidas e o envio de msgs fica por conta dos actions da interface grafica. n sei se tem algum problema nisso, mas pegou, qnd eu fizer esse teste remoto, eu posto aki.

T

bom entao voce esta usando o Thread de eventos do awt (que vai controlar os eventos de botao etc) e nem esta sabendo =D

H

eu pensei nisso tb!!! axo q deva ta usando implicitamente sim.

P

hlds:
pq sou newbie em treads, vo ter q dar 1 olhada como funciona caso eu keira fazer c treads, caso eu n consiga, vou apelar p treads, vlw :D
Cara, o teu chat funcionou??? vc poderia me passar esse código??? fico grato desde já por sua atenção. Até mais!

[email removido]

Criado 21 de junho de 2006
Ultima resposta 15 de nov. de 2006
Respostas 13
Participantes 5