CHAT REDE EXERNA
Boa tarde a todos,
tenho o código do chat (Rapid_Chat), funcionando na rede local perfeito.
Vb.Net com Windows Form.
Somente Texto.
somente um Cliente e um Servidor.
Quando ping no IP da máquina que estou tentando enviar e receber mensagem externa, pinga normalmente, ,porém, não recebo nem envio nada. Não apresenta erro, simplesmente não envia.
Veja código abaixo.
Imports System.Net.Sockets
Imports System.Threading
Imports System.IO
Imports System.Windows.Forms
Imports System
Imports System.Net.Dns
Imports System.Drawing.Bitmap
Imports UNOLibs.Net.ClientClass
Imports RapChatLib.RapChatLib
Public Class frmServidor
Dim ListenerServer As New TcpListener(9002)
Dim Client As New TcpClient
Dim Message As String = [Ô][Ô]
Dim ListenerServer1 As New TcpListener(9013)
Dim Client1 As New TcpClient
Dim Message1 As String = [Ô][Ô]
Dim IPAdd As String
Dim clnt As New UNOLibs.Net.ClientClass
Dim clnt2 As New UNOLibs.Net.ClientClass
Private Sub frmServidor_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim ListThread As New Thread(New ThreadStart(AddressOf Listening)) [ô]Creates the thread
ListThread.Start() [ô]Starts the thread
End Sub
Private Sub Listening()
ListenerServer.Start()
ListenerServer1.Start()
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
If ListenerServer.Pending = True Then
Message = [Ô][Ô]
Client = ListenerServer.AcceptTcpClient()
Dim Reader As New StreamReader(Client.GetStream())
While Reader.Peek > -1
Message = Message + Convert.ToChar(Reader.Read()).ToString
End While
txtRecebe.ForeColor = Drawing.Color.Black [ô]Color.Black
txtRecebe.Text += Message + vbCrLf
End If
If ListenerServer1.Pending = True Then
Message1 = [Ô][Ô]
Client1 = ListenerServer1.AcceptTcpClient()
Dim Reader1 As New StreamReader(Client1.GetStream())
While Reader1.Peek > -1
Message1 = Message1 + Convert.ToChar(Reader1.Read()).ToString
End While
End If
End Sub
Private Sub btnSend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSend.Click
Dim Data As DateTime
Data = DateTime.Now
If txtNome.Text = [Ô][Ô] Or txtIPServidor.Text = [Ô][Ô] Then
MessageBox.Show([Ô]All Fields must be Filled[Ô], [Ô]Error Sending Message[Ô], MessageBoxButtons.OK, MessageBoxIcon.Error)
Else
Try
Client = New TcpClient(txtIPServidor.Text, 9001)
Dim Writer As New StreamWriter(Client.GetStream())
Writer.Write(txtNome.Text + [Ô] : [Ô] + txtmessage.Text + vbCrLf)
Writer.Flush()
txtmessage.Text = [Ô][Ô]
Catch ex As Exception
Console.WriteLine(ex)
Dim Errorresult As String = ex.Message
MessageBox.Show(Errorresult & vbCrLf & vbCrLf & [Ô]Please Review Client Address[Ô], [Ô]Error Sending Message[Ô], MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End If
End Sub
Private Sub btnConnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConnect.Click
If txtIPServidor.Text.Length < 4 Then
MessageBox.Show([Ô]Please Enter a Valid Address[Ô], [Ô]Error[Ô], MessageBoxButtons.OK, MessageBoxIcon.Error)
Else
btnConnect.Text = [Ô]Connecting[Ô]
Dim pingresult As String = txtIPServidor.Text [ô][Ô]192.168.1.2[Ô] [ô]My.Computer.Network.Ping(cmbAddress.Text)
If pingresult = [Ô]True[Ô] Then
btnConnect.Text = [Ô]Connected[Ô]
Else
btnConnect.Text = [Ô]Disconnected[Ô]
End If
End If
End Sub
Private Sub btnClear_Click(sender As Object, e As EventArgs) Handles btnClear.Click
txtmessage.Text = [Ô][Ô]
txtRecebe.Text = [Ô][Ô]
End Sub
End Class
tenho o código do chat (Rapid_Chat), funcionando na rede local perfeito.
Vb.Net com Windows Form.
Somente Texto.
somente um Cliente e um Servidor.
Quando ping no IP da máquina que estou tentando enviar e receber mensagem externa, pinga normalmente, ,porém, não recebo nem envio nada. Não apresenta erro, simplesmente não envia.
Veja código abaixo.
Imports System.Net.Sockets
Imports System.Threading
Imports System.IO
Imports System.Windows.Forms
Imports System
Imports System.Net.Dns
Imports System.Drawing.Bitmap
Imports UNOLibs.Net.ClientClass
Imports RapChatLib.RapChatLib
Public Class frmServidor
Dim ListenerServer As New TcpListener(9002)
Dim Client As New TcpClient
Dim Message As String = [Ô][Ô]
Dim ListenerServer1 As New TcpListener(9013)
Dim Client1 As New TcpClient
Dim Message1 As String = [Ô][Ô]
Dim IPAdd As String
Dim clnt As New UNOLibs.Net.ClientClass
Dim clnt2 As New UNOLibs.Net.ClientClass
Private Sub frmServidor_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim ListThread As New Thread(New ThreadStart(AddressOf Listening)) [ô]Creates the thread
ListThread.Start() [ô]Starts the thread
End Sub
Private Sub Listening()
ListenerServer.Start()
ListenerServer1.Start()
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
If ListenerServer.Pending = True Then
Message = [Ô][Ô]
Client = ListenerServer.AcceptTcpClient()
Dim Reader As New StreamReader(Client.GetStream())
While Reader.Peek > -1
Message = Message + Convert.ToChar(Reader.Read()).ToString
End While
txtRecebe.ForeColor = Drawing.Color.Black [ô]Color.Black
txtRecebe.Text += Message + vbCrLf
End If
If ListenerServer1.Pending = True Then
Message1 = [Ô][Ô]
Client1 = ListenerServer1.AcceptTcpClient()
Dim Reader1 As New StreamReader(Client1.GetStream())
While Reader1.Peek > -1
Message1 = Message1 + Convert.ToChar(Reader1.Read()).ToString
End While
End If
End Sub
Private Sub btnSend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSend.Click
Dim Data As DateTime
Data = DateTime.Now
If txtNome.Text = [Ô][Ô] Or txtIPServidor.Text = [Ô][Ô] Then
MessageBox.Show([Ô]All Fields must be Filled[Ô], [Ô]Error Sending Message[Ô], MessageBoxButtons.OK, MessageBoxIcon.Error)
Else
Try
Client = New TcpClient(txtIPServidor.Text, 9001)
Dim Writer As New StreamWriter(Client.GetStream())
Writer.Write(txtNome.Text + [Ô] : [Ô] + txtmessage.Text + vbCrLf)
Writer.Flush()
txtmessage.Text = [Ô][Ô]
Catch ex As Exception
Console.WriteLine(ex)
Dim Errorresult As String = ex.Message
MessageBox.Show(Errorresult & vbCrLf & vbCrLf & [Ô]Please Review Client Address[Ô], [Ô]Error Sending Message[Ô], MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End If
End Sub
Private Sub btnConnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConnect.Click
If txtIPServidor.Text.Length < 4 Then
MessageBox.Show([Ô]Please Enter a Valid Address[Ô], [Ô]Error[Ô], MessageBoxButtons.OK, MessageBoxIcon.Error)
Else
btnConnect.Text = [Ô]Connecting[Ô]
Dim pingresult As String = txtIPServidor.Text [ô][Ô]192.168.1.2[Ô] [ô]My.Computer.Network.Ping(cmbAddress.Text)
If pingresult = [Ô]True[Ô] Then
btnConnect.Text = [Ô]Connected[Ô]
Else
btnConnect.Text = [Ô]Disconnected[Ô]
End If
End If
End Sub
Private Sub btnClear_Click(sender As Object, e As EventArgs) Handles btnClear.Click
txtmessage.Text = [Ô][Ô]
txtRecebe.Text = [Ô][Ô]
End Sub
End Class
Fiz um uma vez to procurando aqui pra ver se te envio, ele funcionava via ip externo...
Vai ajudar bastante.
Tente entender que conexões por sockets, dependem muito mais da estrutura da rede do que de código. Portas e vias devem ser abertas para que tudo flua normalmente e isso nem sempre é algo fácil de ser conseguido, conforme a estrutura de rede em que o usuário está. Por isso, a melhor alternativa para o que você quer é uma WebAPI, porque ela usa a mesma estrutura HTTP já disponÃvel para praticamente todos os usuários.
Caso não consiga resolver seu problema não perca tempo reinventando a roda..
Tem um servidor chamado OpenFire (https://www.igniterealtime.org/projects/openfire/) e um Client Chat chamado SPARK (https://www.igniterealtime.org/projects/spark/), é uma solução excelente.. tem até client chat web e registra log, envia arquivos, funciona em localhost más também via web externo se quiser é perfeito só vi vantagens..
Abraços!
Tem um servidor chamado OpenFire (https://www.igniterealtime.org/projects/openfire/) e um Client Chat chamado SPARK (https://www.igniterealtime.org/projects/spark/), é uma solução excelente.. tem até client chat web e registra log, envia arquivos, funciona em localhost más também via web externo se quiser é perfeito só vi vantagens..
Abraços!
Quanto a resposta do KERPLUNK, as portas foram liberadas nas duas máquinas, mas não rodou.
Quanto a resposta do MESTRE, vou verificar estes sites e posto novamente.
Tenho que trabalhar tanto localhost quanto rede externa.
Obrigado.
Quanto a resposta do MESTRE, vou verificar estes sites e posto novamente.
Tenho que trabalhar tanto localhost quanto rede externa.
Obrigado.
Estive verificando os links acima e constatei que não é o que preciso. Estes são instaladores e não podem ser comercializado.
algum erro no código acima?
algum erro no código acima?
O código parece ok, o que você não entendeu é que o problema não é o código, mas sim a estrutura do qual ele precisa para rodar apropriadamente. Esse tipo de conexão, funcionaria bem para redes internas, onde o tráfego de rede pode ser controlado de forma muito mais estrita. Quando se trata de expor o serviço para a internet a coisa muda completamente de figura. Não que o código tenha que ser diferente, ele pode ser exatamente o mesmo, mas a estrutura de rede varia de servidor para servidor(leia-se provedor para provedor). São muitos os casos em que portas não usuais são bloqueadas e para liberar essas portas não é nem simples, nem fácil e nem barato. Veja como funciona a maioria dos programas do tipo que você quer, eles não são conexões TCP socket, mas sim fazem uso de WebAPI. O funcionamento é simples, centralizado na WebAPI. Cada usuário faz o login e fica [Ô]visÃvel[Ô] para a WebAPI servir como intermediária da conversa para qualquer outro usuário. é como isso funciona. Você não faz uma conexão direta de máquina à máquina, mas sim conecta em um server que faz o [Ô]meio de campo[Ô]. WebAPI pode transmitir não somente texto, mas dados de qualquer tipo, como imagem, voz, arquivos e até stream em tempo real. A estrutura é simples, utilizando uma via que já está disponÃvel para qualquer usuário que tenha acesso à internet, que é pela porta 80.
Tópico encerrado , respostas não são mais permitidas