CHAT

MOUSER 24/03/2016 17:38:42
#459853
Galera, hoje vou estar dando inicio as pesquisas sobre como funciona e como montar um chat desenvolvido em VB.NET, alguém tem algumas apostilas para me auxiliar nos estudos também, eu montei uma janela basica, que ainda vai sofrer algumas alterações, a minha ideia sobre este chat simples até de mais, é para poder conversar com alguns amigos especificos conectados a internet.
O que já tenho em mente para começar o desenvolvimento?
Login, sei que vai ser necessario um login, para diferenciar um usuario do outro.
O que pretendo fazer com o chat?
Poder conversar em grupo e com uma janela nova, conversar em particular individualmente com o usuarios cadastrados.
O que não pode ocorrer?
Conversas de pessoas que não tenha login. Por isso já deixei configurado a primeira tela a de login, antes de abrir qualquer outra janela.
Como montei essa Janela principal apresentado?
Duas textbox com multi-linhas, dois botões simples para enviar e deslogar, Duas label, uma para indicar o Usuario e o Nickname (Codinome) de quem esta logado.

Estou aceitando dicas e sugestões;
KERPLUNK 24/03/2016 17:57:25
#459854
A primeira coisa a pensar é sempre o Server. O client é sempre secundário. As perguntas a se fazer são:
- Que plataformas quero atender? Vai ser somente para redes internas ou vai atender qualquer coisa com acesso à internet?
- Terá alguma integração com outros serviços, como Facebook, Google+ ou Twitter?
- Você vai trafegar que tipos de dados, somente texto ou imagens e outros arquivos também?
- Você pensa em arquivar as conversas? Caso sim, onde, no client, no server ou ambos?

Isso pra começar.
KURTGU 24/03/2016 19:14:16
#459861
Mouse desculpa cara nao achei o exemplo que te falei mais tenho um via socket de ip para ip se te interressar...vou procurar aqui no meu hd e te mando pelo face mais pra te ajudar.

Segue um link como eu consegui fazer funcionar...

www.google.com.br/search?q=chat+p2p+vb.net&oq=chat+p2p+vb.net&aqs=chrome..69i57.5560j0j7&sourceid=chrome&ie=UTF-8
KERPLUNK 24/03/2016 19:17:41
#459862
Usar sockets, é arriscado se a aplicação tiver acesso via Web.
DS2T 24/03/2016 19:54:52
#459864
Então cara, depende muito do que você quer, e principalmente as plataformas que vai usar.
Se for feito só para Windows Form, vai fundo no TcpListener e TcpClient. Se não me engano, o Macoratti até uns anos atrás tinha um exemplo de chat nesses moldes, depois dá uma pesquisada.
Agora se for usar outras plataformas, recomendo pesquisar sobre Push Notification... é uma maneira leve de fazer isso. Evitando aquele loop eterno no lado do cliente em busca de informações no servidor e sobrecarregando o coitado. Porque nesse caso, ao invés do cliente ficar verificando no servidor... o servidor notifica o cliente quando tem novas mensagens.

Fazendo toda a estrutura com os métodos de comunicação, o próximo passo é elaborar um padrão do seu texto. Exemplo: Pode colocar tudo em xml, com as tags <tipo_dados> (imagem, texto, etc), <conteudo> (conteudo da informacao)... algo assim.

Lembrando também que deve sempre se preocupar com perdas de informação (problemas de conexão, por exemplo) ... e também ter em mente, que a mensagem chegará dividida em vários pacotes de bytes... São muitos detalhes, qualquer coisa você dá um toque.
MOUSER 24/03/2016 20:06:53
#459865
- Que plataformas quero atender? Vai ser somente para redes internas ou vai atender qualquer coisa com acesso à internet?
Sistemas Operacionais - Windows, Qualquer computador com acesso a internet com Windows, apesar que o CHAT (assim como chamo), será entregue somente para alguns amigos selecionados, a ideia não é comercial nem distribuir para um publico aberto, mas um grupo fechado. Recebi o desafio. A linguagem que pretendo usar, VB.NET com SQL Server (SQL irei usar mais para o Login, para o chat ainda não sei se usarei, como nunca criei um).
- Terá alguma integração com outros serviços, como Facebook, Google+ ou Twitter?
Não, nenhuma relação com nenhuma rede social, será algo bem simples, o mais simples possivel, mais um envio e recebimento de mensagem, para ficar mais claro, estarei postando na resposta seguinte, como ficara a janela do Chat. (Que é o foco que pretendo trabalhar).
- Você vai trafegar que tipos de dados, somente texto ou imagens e outros arquivos também?
Inicialmente, só Texto. Pois meu foco é entender inicialmente como funciona e criar um meu próprio chat e distribuir entre alguns amigos selecionados para poder conversar como um chat convencional.
Talvez seria interessante o envio de um link tipo: [Ô]imagem.jpg[Ô] para que a pessoa possa clicar e baixar a imagem se caso algum usuário queira enviar imagem. Mas só imagem no máximo, não é um item obrigatório inicialmente.
- Você pensa em arquivar as conversas? Caso sim, onde, no client, no server ou ambos?
As conversas estou analisando o custo/beneficio, estou procurando algum servidor gratuito para fazer isso, mas inicialmente nos clientes serão salvas as conversas, como o CHAT é capaz de juntar varias pessoas em um único ambiente. Estou pensando seriamente também em não salvar, assim que a pessoa entrar no CHAT, começar a acompanhar a conversa a partir daquele momento.
KERPLUNK 24/03/2016 20:07:05
#459866
Assino em baixo do que o DS2T sugeriu. E correndo o risco de parecer redundante, o que você precisa é de uma WebAPI para agir como server. Ela vai fazer a ponte entre qualquer cliente que você queira, tanto aplicações desktop quanto aplicações Web, mobile e até Internet das coisas. Uma WebAPI facilitaria até o acesso por dispositivos customizados. Estou fazendo uns testes com dispositivos usando Arduino Nano, numa tentativa de automatizar tudo na casa. Ligar e desligar aparelhos e lâmpadas, ver câmeras, enviar som em um intercom, trancar e destrancar portas, abrir janelas, recolher roupa do quintal, à um custo baixíssimo(apenas alguns motores servos, microcontroladores e duas ou três placas arduino) e disponível para acesso remoto. Parece até mentira, mas é possível sim, ligar e desligar aparelhos remotamente, através de um aplicativo cliente para Android ou iOS. Tudo isso, controlado por uma WebAPI, que envia(através de notificação push) e recebe dados de clientes que podem ser aplicações Desktop, Web, mobile e até dados vindos do arduino. WebAPI é o que há!
MOUSER 24/03/2016 20:43:57
#459868
Como prometi, segue em anexo a imagem do que pretendo montar. é algo bem simples, não existe muita coisa, só envio e recebimento de mensagem, não sei se é recomendado implementar com data, Kerp e DS2T, estarei pesquisando sobre o recomendado, como disse na resposta anterior, a plataforma é só Windows Form, por motivos de que 90% dos que conheço usam Windows, e os que vou passar o CHAT também, os outros 10% usam linux, 0,01% usa Mac. Acaba não compensando o tempo para desenvolver e converter para outras plataformas alem do windows. Como eu disse, é sem fins lucrativos, então se o pessoal permitir, eu disponibilizarei uma cópia para o VBMANIA pela ajuda dos amigos. Disponível para os desenvolvedores também estudarem e implementarem também.
MOUSER 24/03/2016 20:51:50
#459869
Galera, achei esse modelo, no Macoratti, só que em C#, estou fazendo a leitura ainda, supondo que eu use server no lugar do client ou use até mesmo o client como server, o campo [Ô]Servidor IP[Ô] é preenchido Automaticamente?
MOUSER 24/03/2016 21:23:12
#459870
Galera, andei olhando, e criei o seguinte código de acordo com o link: http://www.macoratti.net/09/01/vbn_smt1.htm
No caso a variável enderecoLocal está dando erro, Dim enderecoLocal As IPAddress = IPAddress.Parse([Ô]127.0.0.1[Ô]) a parte sublinhada diz que o IPAddress não está definido. Simplesmente fiz a leitura, digitei de acordo com o modulo do site, mas apareceu isso.
Obs: Só fiz o Modulo1 até agora.
Citação:


Imports System.Net.Sockets
Imports System.Text
Module Module1
Dim listaClientes As New Hashtable
Sub Main()
Dim enderecoLocal As IPAddress = IPAddress.Parse([Ô]127.0.0.1[Ô])
Dim serverSocket As New TcpListener(enderecoLocal, 8888)
Dim clientSocket As TcpClient = Nothing
Dim contador As Integer
serverSocket.Start()
Mensagem([Ô]Servidor Chat Iniciado ...[Ô])
contador = 0
While (True)
contador += 1
clientSocket = serverSocket.AcceptTcpClient()
Dim bytesFrom(10024) As Byte
Dim dadosDoCliente As String
Dim networkStream As NetworkStream = clientSocket.GetStream()
networkStream.Read(bytesFrom, 0, CInt(clientSocket.ReceiveBufferSize))
dadosDoCliente = Encoding.ASCII.GetString(bytesFrom)
dadosDoCliente = dadosDoCliente.Substring(0, dadosDoCliente.IndexOf([Ô]$[Ô]))
listaClientes(dadosDoCliente) = clientSocket
broadcast(dadosDoCliente + [Ô] Entrou [Ô], dadosDoCliente, False)
Mensagem(dadosDoCliente + [Ô] Entrou na Sala [Ô])
Dim cliente As New tratarCliente
cliente.iniciaCliente(clientSocket, dadosDoCliente, listaClientes)
End While
clientSocket.Close()
serverSocket.Stop()
Mensagem([Ô]sair[Ô])
Console.ReadLine()
End Sub
Sub Mensagem(ByVal texto As String)
texto.Trim()
Console.WriteLine([Ô] >> [Ô] + texto)
End Sub
Private Sub broadcast(ByVal Mensagem As String, ByVal nomeUsuario As String, ByVal flag As Boolean)
Dim Item As DictionaryEntry
For Each Item In listaClientes
Dim broadcastSocket As TcpClient
broadcastSocket = CType(Item.Value, TcpClient)
Try
Dim broadcastStream As NetworkStream = broadcastSocket.GetStream()
Dim broadcastBytes As [Byte]()
If flag = True Then
broadcastBytes = Encoding.ASCII.GetBytes(nomeUsuario + [Ô] diz : [Ô] + Mensagem)
Else
broadcastBytes = Encoding.ASCII.GetBytes(Mensagem)
End If
broadcastStream.Write(broadcastBytes, 0, broadcastBytes.Length)
broadcastStream.Flush()
Catch ex As Exception
MsgBox(ex.Message)
End Try
Next
End Sub
Public Class tratarCliente
Dim clientSocket As TcpClient
Dim clNo As String
Dim listaClientes As Hashtable
Public Sub iniciaCliente(ByVal inClientSocket As TcpClient, ByVal clineNo As String, ByVal cList As Hashtable)
Me.clientSocket = inClientSocket
Me.clNo = clineNo
Me.listaClientes = cList
Dim ctThread As Threading.Thread = New Threading.Thread(AddressOf doChat)
ctThread.Start()
End Sub
Private Sub doChat()
Dim contadorRequisicao As Integer
Dim bytesFrom(10024) As Byte
Dim dadosDoCliente As String
Dim rContador As String
contadorRequisicao = 0
While (True)
Try
contadorRequisicao = contadorRequisicao + 1
Dim networkStream As NetworkStream = clientSocket.GetStream()
networkStream.Read(bytesFrom, 0, CInt(clientSocket.ReceiveBufferSize))
dadosDoCliente = System.Text.Encoding.ASCII.GetString(bytesFrom)
dadosDoCliente = dadosDoCliente.Substring(0, dadosDoCliente.IndexOf([Ô]$[Ô]))
Mensagem([Ô]Cliente - [Ô] + clNo + [Ô] : [Ô] + dadosDoCliente)
rContador = Convert.ToString(contadorRequisicao)
broadcast(dadosDoCliente, clNo, True)
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End While
End Sub
End Class
End Module

DS2T 24/03/2016 21:29:16
#459871
Você precisa importar o namespace System.Net.
Página 1 de 5 [45 registro(s)]
Tópico encerrado , respostas não são mais permitidas