CHAT
Citação:
Você precisa importar o namespace System.Net.
Obrigado DS2T, problema resolvido imediato.
Uma vez que o server esteja pronto, você pode testar com outras ferramentas, até mesmo um telnet e depois resolver a sua aplicação cliente.
Continuando o sistema, se eu criar um banco de dados com uma tabela de login, registrando o Nome de usuario e senha, se encontrar os mesmos que foi digitado na janela de login, ele importa o nome de usuario para o nome que vai ser apresentado na janela? Pois estou pensando usar o proprio computador da pessoa como servidor, juntar o modulo com o chat para iniciar pesquisar o usuario e senha na tabela e por fim dar inicio a conversa.
Citação:
Imports System.Net.Sockets
Imports System.Text
Imports System.Net
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
Citação:Você está sabendo que mutos provedores não dão mais suporte à IPv4, não é? E os que ainda dão, estão migrando para IPv6...
No caso, como faria a alteração para o IPv6 Kerp? Não conheço muito mas quero poder conhecer melhor!
Imagine que você é um carteiro e tem um monte de cartas para entregar. Como ficaria mais fácil fazer seu trabalho? Cartas com endereço, logradouro e número ou cartas contendo coordenadas de GPS? Pense nisso um pouco.
O servidor do seu chat é quem vai fazer a distribuição das mensagens, você não vai conectar client à client, à menos que você queira basear sua aplicação no padrão P2P e aà a coisa complica um bocado. Você vai fazer um server, os clients se conectam nele. Alguns clients vão estar com autenticados pelos seus respectivos ISP[ô]s com IPv4 e outros com IPv6. Se você fizer sua aplicação baseada em sockets, vai ter que necessariamente prover acesso para ambos e isso vai dificultar sua vida. Depois de pronto, você vai ter que ter algum lugar na nuvem para hospedar sua aplicação e se você desenvolveu o seu server por sockets, vai ter que pagar uma máquina dedicada para poder fazer a publicação dele.
Já se você fizer uma WebAPI, você não terá que se preocupar com o tipo de autenticação de rede do seus clients, consegue até mesmo hospedagem gratuita(para pequenas aplicações, como é seu caso) e ainda deixa seu projeto pronto para qualquer tipo de client. Você pode usar a mesma estrutura da WebAPI que eu passo nos vÃdeos e usar a mesma idéia para o client. A única diferença seria a implementação de notificações PUSH, mas isso é bem simples de ser feito.