Usuário com melhor resposta
Problema para estabelecer uma conexão entre Cliente.exe e Servidor.exe usando o serviço No-ip.

Pergunta
-
Boa tarde,
Eu tenho um aplicativo de acesso remoto e eu preciso receber conexões de meus clientes utilizando o serviço No-ip (no-ip.com), tendo em vista que ip externo é sempre dinâmico.
Então eu já feito todas as configurações corretamente (do lado Servidor.exe) tais como:
- Liberei as portas necessárias no modem
- Desativei o firewall do Windows
e até agora não obtive sucesso para estabelecer esta conexão (com ip local usando Cliente.exe e Servidor.exe na msma rede, funciona perfeitamente).
Então, atualmente estou utilizando o seguinte código abaixo para tentar estabelecer esta conexão
usando o serviço No-ip (no-ip.com):
Public Class SocketClient Private C As TcpClient Public Function IsIPAddressValid(ByVal addrString As String) As Boolean Dim address As IPAddress Return IPAddress.TryParse(addrString, address) End Function Sub Connect(ByVal h As String, ByVal p As Integer) Dim ipAddr As System.Net.IPAddress Dim ipEndPoint As System.Net.IPEndPoint Try Try If C IsNot Nothing Then C.Close() C = Nothing End If Catch ex As Exception End Try Do Until IsBuzy = False Threading.Thread.CurrentThread.Sleep(1) Loop Try ipAddr = IPAddress.Parse(h) ipEndPoint = New System.Net.IPEndPoint(ipAddr, p) C = New TcpClient(ipEndPoint) C.Connect(ipEndPoint) MessageBox.Show("Ok") ' Devido ao erro, esta mensagem nunca aparece Dim t As New Threading.Thread(AddressOf RC, 10) t.Start() RaiseEvent Connected() Catch ex As Exception End Try Catch ex As Exception RaiseEvent Disconnected() End Try End Sub Function conn() As String Dim inStream As StreamReader Dim webRequest As WebRequest Dim webresponse As WebResponse Dim ip As String = Nothing Dim tfk As New Thread(Sub() Try webRequest = webRequest.Create(Decrypt1("kTbXQyC7KwzyNTyQNzfQqN0rg2CMhKdwNWvBts6hS7Q=")) 'Url para o arquivo .txt remoto webresponse = webRequest.GetResponse() inStream = New StreamReader(webresponse.GetResponseStream()) ip = inStream.ReadToEnd() If Not IsIPAddressValid(ip) Then Dim hostname As IPHostEntry = Dns.GetHostByName(ip) ' Pega o endereço No-ip contido no arquivo .txt remoto Dim Noip As IPAddress() = hostname.AddressList ip = Noip(0).ToString() 'Endereço No-ip convertido para o ip externo correspondente End If Catch ex As Exception End Try End Sub) tfk.Start() tfk.Join() Return ip End Function End Class
''''''''' Form1.vb (Cliente.exe) '''''''''''
Public Class Form1 Public WithEvents C As New SocketClient Public HOST As String = Nothing Public port As Integer Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load HOST = C.conn Dim port = 92 End Sub Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick If C.Statconnected = False Then C.Connect(HOST, port) End If End Sub End Class
Alguém tem alguma ideia do que possa estar acontecendo e possa me ajudar com este grave problema?
Já tentei de várias formas com relação ao uso do TcpClient.Connect() e classe IPEndPoint, mas até agora nada de sucesso.
Entretanto, quaisquer outras sugestões serão bem recebidas!
- Editado FL4SHC0D3R quarta-feira, 18 de novembro de 2015 17:22
Respostas
-
Oi amigo Recomendo desta forma
Recomendo que use desta forma 'conect server to client no forme lord do seu cliente host = "meuhost.ddns.net" porta = 92 c.Connect(host, porta) 'conect server to host porta tcpi/ip / cliente servidor Me.Timer1.Interval = 100 'tempo Me.Timer1.Start() 'start conexao Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick On Error Resume Next If c.Statconnected = False Then 'not conected = reconect server c.Connect(host, porta) 'conect server /porta host End If End Sub
- Marcado como Resposta Marcos SJ quinta-feira, 19 de novembro de 2015 17:38
Todas as Respostas
-
Oi amigo Recomendo desta forma
Recomendo que use desta forma 'conect server to client no forme lord do seu cliente host = "meuhost.ddns.net" porta = 92 c.Connect(host, porta) 'conect server to host porta tcpi/ip / cliente servidor Me.Timer1.Interval = 100 'tempo Me.Timer1.Start() 'start conexao Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick On Error Resume Next If c.Statconnected = False Then 'not conected = reconect server c.Connect(host, porta) 'conect server /porta host End If End Sub
- Marcado como Resposta Marcos SJ quinta-feira, 19 de novembro de 2015 17:38
-
-
Infelizmente nenhuma dessas 2 formas não funcionam com nome de host dns (ex: No-ip, DuckDns etc), pois já tentei de várias formas com relação a tais sugestões, mas até agora sem sucesso, nem mesmo fazendo a conversão do nome para ip funcionou. Se vc puder testar aí esse exemplo do Macoratti e me retornar uma mensagem de sucesso ou insucesso, agradeceria bastante a ajuda.
Aguardo resposta.
- Editado FLASHCODER quinta-feira, 19 de novembro de 2015 20:23
-
Bom pelo que vi vc quer fazer conexão reversa vc teria que ter o duc no pc estalado e esta logado em sua conta no-ip teria que permitir seu aplicativo no firewall e abri a porta usada de conexão em seu modem e roteador caso tenha um e permitir aceso remoto em seu pc bom verifique isso antes de fazer os testes e relate o erro que esta ocoreno que impedir vc de se conectar ... Espero ter ajudado vc
-
Bom pelo que vi vc quer fazer conexão reversa vc teria que ter o duc no pc estalado e esta logado em sua conta no-ip teria que permitir seu aplicativo no firewall e abri a porta usada de conexão em seu modem e roteador caso tenha um e permitir aceso remoto em seu pc bom verifique isso antes de fazer os testes e relate o erro que esta ocoreno que impedir vc de se conectar ... Espero ter ajudado vc
Isso é conexão reversa sim. Já fiz todo procedimento descrito por você acima, inclusive esta postagem relata exatamente o problema que estou passando, e a mensagem do Exception é exatamente a mesma, pode ter certeza que fiz todos os 3 passos sugeridos pelo autor do post na busca por uma solução, mas sem sucesso até agora. Como disse lá em cima, aqui ta tudo desativado: Antivírus, Firewall, redirecionamento de portas feito, inclusive ativei o DMZ tbm, e DUC devidamente configurado e ativado. Ainda com relação a postagem que encontrei como falei anteriormente, entre outras dicas, ele sugere para que coloque o TcpListener (parte "servidor.exe") para ouvir a partir do própio pc (ip interno), então baseado no código do autor do post eu fiz aqui no meu igual a como se segue:
Dim TL As TcpListener TL = New TcpListener(IPAddress.Parse("192.168.25.116"), 100) TL.Start();
'Antes estava sem o ip:
Dim TL As TcpListener TL = New TcpListener(100) TL.Start();
Daí quando executo a parte cliente em um pc que tenho exclusivo só pra testes, me aparece a seguinte mensagem no Exception (da parte cliente): Exception gerada no "cliente.exe"
Sinceramente já nem sei mais por qual caminho seguir nessa tentativa de sanar este sério problema :=(
Por acaso meu amigo aí teria como testar ao menos o exemplo do autor do post citado (inclusive dps de aplicar a dica dele de resolução, e me dizer se teve sucesso aí? Agradeceria bastante por essa ajuda ajuda se der.
O objetivo é bem simples! o cliente conectar-se ao meu pc através do meu ip externo (ip fornecido pela operadora de internet) ou via host name (que é pelo ip externo tbm teoricamente) usando o serviço No-ip (se quiser tbm pode usar uma função pra "tranformar o host name em ip" antes da instância do Listener se achar muito confuso).
Ou seja, sempre o problema gira em torno de Como receber conexões de um pc externo usando o ip externo? :-)
Aguardo retorno.
- Editado FLASHCODER sábado, 21 de novembro de 2015 02:23
-
Assim amigo
Public WithEvents c As New SocketClient 'conect TCP cliente servidor Public Shared porta As String = "92" 'porta TCP Public Shared host As String = "seurost.ddns.net" 'host /ip / aqui fica o rost da no-ip da duc que vc teria que criar 'forme lord 'conect server to client c.Connect(host, porta) 'conect server to host porta tcpi/ip / cliente servidor Me.Timer1.Interval = 100 'tempo Me.Timer1.Start() 'start conexao Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick On Error Resume Next If c.Statconnected = False Then 'not conected = reconect server c.Connect(host, porta) 'conect server /porta host End If End Sub Private Sub c_Connected() Handles c.Connected On Error Resume Next 'clean erros continue End Sub Private Sub c_Disconnected() Handles c.Disconnected On Error Resume Next 'clean erros continue c.Connect(host, porta) 'reconectar server disconected End Sub
-
-
Se o seu cliente servidor nao conecta usado esse metodo que postei agora o erro esta em sua class de conexão tcp/ip
Você chegou a testar o exemplo do link do post que mandei do outro fórum, usando o No-ip e DUC?
funcionou?
-
Sim os meios de conexão estao coretos o erro esta ocorrendo em sua class de conexão bom eu tenho um cliente servidor meu que esta 100% funcional irei postar para vc espero ter ajudado vc qualquer coisa fala ae blz..
Servidor
Imports System.Net Imports System.Net.Sockets Imports System.Text 'Imports Imports System.IO Public Class SocketClient 'conezao tcp/ip cliente servidor Private C As TcpClient Public Event Connected() Public Event Disconnected() Public Event Data(ByVal b As Byte()) Private IsBuzy As Boolean = False Public Function Statconnected() As Boolean Try If C.Client.Connected = True Then Return True Else Return False End If Catch ex As Exception End Try End Function Sub Connect(ByVal h As String, ByVal p As Integer) Try Try If C IsNot Nothing Then C.Close() C = Nothing End If Catch ex As Exception End Try Do Until IsBuzy = False Threading.Thread.Sleep(1) Loop Try C = New TcpClient C.ReceiveTimeout = -1 C.SendTimeout = -1 C.SendBufferSize = 9999999 C.ReceiveBufferSize = 9999999 C.Client.SendBufferSize = 9999999 C.Client.ReceiveBufferSize = 9999999 C.Connect(h, p) Dim t As New Threading.Thread(AddressOf RC, 1) t.Start() RaiseEvent Connected() Catch ex As Exception End Try Catch ex As Exception RaiseEvent Disconnected() End Try End Sub Private SPL As String = "pass" 'split packets / senha de conexao cliente servidor tcp/ip Sub DisConnect() Try C.Close() Catch ex As Exception End Try C = Nothing RaiseEvent Disconnected() End Sub Sub Send(ByVal s As String) Send(SB(s)) End Sub Sub Send(ByVal b As Byte()) Try Dim m As New MemoryStream m.Write(b, 0, b.Length) m.Write(SB(SPL), 0, SPL.Length) C.Client.Send(m.ToArray, 0, m.Length, SocketFlags.None) Catch ex As Exception DisConnect() End Try End Sub Private Sub RC() IsBuzy = True Dim M As New MemoryStream Dim cc As Integer = 0 re: Threading.Thread.Sleep(1) Try If C Is Nothing Then GoTo co Else If C.Client.Connected = False Then GoTo co Else cc += 1 If cc > 100 Then cc = 0 Try If C.Client.Poll(-1, Net.Sockets.SelectMode.SelectRead) And C.Client.Available <= 0 Then GoTo co End If Catch ex As Exception GoTo co End Try End If End If End If If C.Available > 0 Then Dim B(C.Available - 1) As Byte C.Client.Receive(B, 0, B.Length, Net.Sockets.SocketFlags.None) M.Write(B, 0, B.Length) rr: If BS(M.ToArray).Contains(SPL) Then Dim A As Array = fx(M.ToArray, SPL) RaiseEvent Data(A(0)) M.Dispose() M = New MemoryStream If A.Length = 2 Then M.Write(A(1), 0, A(1).length) Threading.Thread.Sleep(1) GoTo rr End If End If End If Catch ex As Exception GoTo co End Try GoTo re co: IsBuzy = False DisConnect() End Sub End Class Module sockts Function SB(ByVal s As String) As Byte() 'string to byte() On Error Resume Next Return Encoding.Default.GetBytes(s) End Function Function BS(ByVal b As Byte()) As String 'byte() to string On Error Resume Next Return Encoding.Default.GetString(b) End Function Function fx(ByVal b As Byte(), ByVal WRD As String) As Array 'split bytes On Error Resume Next Dim a As New List(Of Byte()) Dim M As New MemoryStream Dim MM As New MemoryStream Dim T As String() = Split(BS(b), WRD) M.Write(b, 0, T(0).Length) MM.Write(b, T(0).Length + WRD.Length, b.Length - (T(0).Length + WRD.Length)) a.Add(M.ToArray) a.Add(MM.ToArray) M.Dispose() MM.Dispose() Return a.ToArray End Function End Module
-
Sim os meios de conexão estao coretos o erro esta ocorrendo em sua class de conexão bom eu tenho um cliente servidor meu que esta 100% funcional irei postar para vc espero ter ajudado vc qualquer coisa fala ae blz..
Servidor
Imports System.Net Imports System.Net.Sockets Imports System.Text 'Imports Imports System.IO Public Class SocketClient 'conezao tcp/ip cliente servidor Private C As TcpClient Public Event Connected() Public Event Disconnected() Public Event Data(ByVal b As Byte()) Private IsBuzy As Boolean = False Public Function Statconnected() As Boolean Try If C.Client.Connected = True Then Return True Else Return False End If Catch ex As Exception End Try End Function Sub Connect(ByVal h As String, ByVal p As Integer) Try Try If C IsNot Nothing Then C.Close() C = Nothing End If Catch ex As Exception End Try Do Until IsBuzy = False Threading.Thread.Sleep(1) Loop Try C = New TcpClient C.ReceiveTimeout = -1 C.SendTimeout = -1 C.SendBufferSize = 9999999 C.ReceiveBufferSize = 9999999 C.Client.SendBufferSize = 9999999 C.Client.ReceiveBufferSize = 9999999 C.Connect(h, p) Dim t As New Threading.Thread(AddressOf RC, 1) t.Start() RaiseEvent Connected() Catch ex As Exception End Try Catch ex As Exception RaiseEvent Disconnected() End Try End Sub Private SPL As String = "pass" 'split packets / senha de conexao cliente servidor tcp/ip Sub DisConnect() Try C.Close() Catch ex As Exception End Try C = Nothing RaiseEvent Disconnected() End Sub Sub Send(ByVal s As String) Send(SB(s)) End Sub Sub Send(ByVal b As Byte()) Try Dim m As New MemoryStream m.Write(b, 0, b.Length) m.Write(SB(SPL), 0, SPL.Length) C.Client.Send(m.ToArray, 0, m.Length, SocketFlags.None) Catch ex As Exception DisConnect() End Try End Sub Private Sub RC() IsBuzy = True Dim M As New MemoryStream Dim cc As Integer = 0 re: Threading.Thread.Sleep(1) Try If C Is Nothing Then GoTo co Else If C.Client.Connected = False Then GoTo co Else cc += 1 If cc > 100 Then cc = 0 Try If C.Client.Poll(-1, Net.Sockets.SelectMode.SelectRead) And C.Client.Available <= 0 Then GoTo co End If Catch ex As Exception GoTo co End Try End If End If End If If C.Available > 0 Then Dim B(C.Available - 1) As Byte C.Client.Receive(B, 0, B.Length, Net.Sockets.SocketFlags.None) M.Write(B, 0, B.Length) rr: If BS(M.ToArray).Contains(SPL) Then Dim A As Array = fx(M.ToArray, SPL) RaiseEvent Data(A(0)) M.Dispose() M = New MemoryStream If A.Length = 2 Then M.Write(A(1), 0, A(1).length) Threading.Thread.Sleep(1) GoTo rr End If End If End If Catch ex As Exception GoTo co End Try GoTo re co: IsBuzy = False DisConnect() End Sub End Class Module sockts Function SB(ByVal s As String) As Byte() 'string to byte() On Error Resume Next Return Encoding.Default.GetBytes(s) End Function Function BS(ByVal b As Byte()) As String 'byte() to string On Error Resume Next Return Encoding.Default.GetString(b) End Function Function fx(ByVal b As Byte(), ByVal WRD As String) As Array 'split bytes On Error Resume Next Dim a As New List(Of Byte()) Dim M As New MemoryStream Dim MM As New MemoryStream Dim T As String() = Split(BS(b), WRD) M.Write(b, 0, T(0).Length) MM.Write(b, T(0).Length + WRD.Length, b.Length - (T(0).Length + WRD.Length)) a.Add(M.ToArray) a.Add(MM.ToArray) M.Dispose() MM.Dispose() Return a.ToArray End Function End Module
tenho usado a sua classe acima, mas ainda continua no mesmo erro. Por ver das dúvidas, poderia me fornecer a sua classe SockerServer.vb (servidor.exe)? talvez também possa está com erro em relação a sua. Esta é a que uso atualmente. E também deixo o projeto de exemplo com o código do autor do post do outro fórum que falei antes. Aqui não funcionou igualmente o meu software. Veja se aí no seu funciona por favor se der!
Aguardo.
- Editado FLASHCODER domingo, 22 de novembro de 2015 15:19
-
Oi amigo bom eu dei uma olha em sua aplicação bom como vc quer fazer conexao reversa o cliente se tonar o servidor e o servidor se tona cliente bom olhei sua aplicação e vi o erro que vc falava do try que dava erro bom na verdade vc tem 2 servidores o que esta dando erro e um servidor tambem vc teria que fazer o cliente esperando a conexao do servidor que pelo que vi ele e um servidor usa host no-ip e porta entao o seu erro e que vc tem 2x servidores o que esta dando erro no try ele e um servidor tambem entao reveja seu projeto e faça do 0 o cliente pois ele nao e um cliente e sim um servidor !! e para se conectar vc precisa de um servidor e de um cliente e pelo que vi em sua aplicação vc tem 2x servidor nao um cliente e um servidor !
Aqui um cliente servidor para que vc possa ver ex = http://www.macoratti.net/net_soc1.htm
Aqui um video fazendo cliente servidor com winsock no youtube ex = https://www.youtube.com/watch?v=A9Ji4hO9bkQ
Aqui amigo uma source completa de cliente servidor sem erros feita para capturar descktop remoto projecto 100% funcional projecto [Source coder] = https://www.sendspace.com/file/179aa0
Espero ter ajudado agora ! Bom uso dos materiais
-
Oi amigo bom eu dei uma olha em sua aplicação bom como vc quer fazer conexao reversa o cliente se tonar o servidor e o servidor se tona cliente bom olhei sua aplicação e vi o erro que vc falava do try que dava erro bom na verdade vc tem 2 servidores o que esta dando erro e um servidor tambem vc teria que fazer o cliente esperando a conexao do servidor que pelo que vi ele e um servidor usa host no-ip e porta entao o seu erro e que vc tem 2x servidores o que esta dando erro no try ele e um servidor tambem entao reveja seu projeto e faça do 0 o cliente pois ele nao e um cliente e sim um servidor !! e para se conectar vc precisa de um servidor e de um cliente e pelo que vi em sua aplicação vc tem 2x servidor nao um cliente e um servidor !
Aqui um cliente servidor para que vc possa ver ex = http://www.macoratti.net/net_soc1.htm
Aqui um video fazendo cliente servidor com winsock no youtube ex = https://www.youtube.com/watch?v=A9Ji4hO9bkQ
Aqui amigo uma source completa de cliente servidor sem erros feita para capturar descktop remoto projecto 100% funcional projecto [Source coder] = https://www.sendspace.com/file/179aa0
Espero ter ajudado agora ! Bom uso dos materiais
Infelizmente seu exemplo de Remote Desktop só funciona em rede local, e uma observação que vale mencionar é que o campo destinado ao No-ip no servidor, não é utilizado ao longo do código, tendo em vista que você está usando IPAddress.Any para ouvir as conexões do CLIENTE.exe, e outra coisa é que particularmente acho que não faz sentido o CLIENTE.exe conectar-se a um ip local, em uma rede externa isso não funcionaria :-).
Em resumo, nesse exemplo, a sua abordagem sobre Cliente <--> Servidor está correta apenas no que diz respeito ao envio de comandos para a aplicação que de fato é a cliente. Com base na pequena noção que tenho sobre conexão reversa Cliente <--> Servidor , o correto seria o CLIENTE.exe conectar-se ao SERVIDOR.exe por meio de um ip externo ou host name (como No-ip) e o SERVIDOR.exe escutar a conexão apenas usando uma porta específica (como normalmente se faz). Entretanto, por favor me corrija se eu estiver errado. Vendo por essa analogia, a forma que estava fazendo estaria correto, mas não sei o porque que não funciona de jeito nenhum em VB.NET.
- Editado FLASHCODER domingo, 22 de novembro de 2015 22:16
-
Como eu disse na resposta a traz seu projecto erra 2x servidores nao um cliente e servidor !! e la em sima le dei uma class completa de conexao perfeita que eu mesmo uso em conexao reversa tambem e funciona perfeitamente o projecto que me deu e como eu disse sao 2x servidor esta erado por favor corrija seu projecto fazendo o cliente o remote desktop foi um projeto feito para vc ver como foi feita a conexao funcional perfeitamente ja o seu projecto e 2x servidor entao nao a como um servidor se conectar a outro servidor e sim a um cliente ! qual quer cliente servidor se conecta revesamente amigo basta colocar vosso host no-ip em vez do ip local q no caso seria 127.0.0.1 deixando bem claro que o erro de seu aplicativo nao esta conectando e porque sao 2x servidores e nao cliente e servidor ! para receber a conexao do servidor remotamente vc teria que refazer seu cliente pois ele e um servidor tambem ! o servidor utiliza vosso host ex ddns.net e a porta ex 100 ja vosso cliente fica esperando a conexao do servidor apenas escutando a porta usada no servidor q nu caso seria a 100 !!!! seu projeto esta erado o cliente e servidor esta usado ip e porta os 2x no caso so teria que arumar o seu cliente mesmo
-
Como eu disse na resposta a traz seu projecto erra 2x servidores nao um cliente e servidor !! e la em sima le dei uma class completa de conexao perfeita que eu mesmo uso em conexao reversa tambem e funciona perfeitamente o projecto que me deu e como eu disse sao 2x servidor esta erado por favor corrija seu projecto fazendo o cliente o remote desktop foi um projeto feito para vc ver como foi feita a conexao funcional perfeitamente ja o seu projecto e 2x servidor entao nao a como um servidor se conectar a outro servidor e sim a um cliente ! qual quer cliente servidor se conecta revesamente amigo basta colocar vosso host no-ip em vez do ip local q no caso seria 127.0.0.1 deixando bem claro que o erro de seu aplicativo nao esta conectando e porque sao 2x servidores e nao cliente e servidor ! para receber a conexao do servidor remotamente vc teria que refazer seu cliente pois ele e um servidor tambem ! o servidor utiliza vosso host ex ddns.net e a porta ex 100 ja vosso cliente fica esperando a conexao do servidor apenas escutando a porta usada no servidor q nu caso seria a 100 !!!! seu projeto esta erado o cliente e servidor esta usado ip e porta os 2x no caso so teria que arumar o seu cliente mesmo
Caro Pjoao1578pro2,
Peguei um projeto como exemplo para fazer o meu software, a parte Stu.exe seria no caso o cliente.exe e a parte Client.exe seria o servidor.exe, então se você puder me ajudar fazendo as devidas correções da parte Stu.exe (cliente.exe nesse projeto no caso) eu ficaria muito grato e feliz se funcionar aqui no meu computador, pois nem mesmo nesse Acesso Remoto de exemplo, não funcionou com o No-ip. Então se você puder fazer as devidas alterações e me retornar a atualização... pois meu software a parte de conexão é igual a deste exemplo, portanto se funcionar no exemplo, com certeza funcionará no meu também! :-)
Aguardo resposta
- Editado FLASHCODER segunda-feira, 23 de novembro de 2015 03:16
-
-
Isso e contra as regras do forum vc esta postando source de trojan ninguém ira le ajudar recomendo que remova seu link ou poderá ser banido pelo admin desse forum !!!
Sendo assim, como você poderia me ajudar então? tem algum email ou Skype para contato? lá eu lhe passaria o projeto do Acesso Remoto de exemplo.
Meu contato do Skype é: xmradio80
Email: llgghh@hotmail.com.br
- Editado FLASHCODER segunda-feira, 23 de novembro de 2015 04:03