Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

scorpio

TCPClient

Recommended Posts

Salve pessoal!

 

To começando a aprender Sockets, mas ele não conecta com outro computador, da o erro abaixo:

A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 192.168.99.146:9999

Quando eu ponho "localhost" ou "127.0.0.1", ele da a mensagem "Conectou".

 

Firewall desativado;

Ping da máquina funciona;

O IP está correto;

 

 

Alguém tem alguma idéia do que seja ?

 

Código do "servidor"

Imports System.Net.Sockets

Module Module1

	Dim ns As NetworkStream
	Dim ActiveClients(0) As TcpClient
	Sub Main()
		Dim TCPListen As TcpListener = New TcpListener(9999)
		TCPListen.Start()
		Console.WriteLine("Servidor iniciado...")

		Dim Running As Boolean = True, i As Integer
		Do While Running
			System.Threading.Thread.Sleep(1)
			If (TCPListen.Pending) Then
				ReDim Preserve ActiveClients(ActiveClients.GetUpperBound(0) + 1)
				ActiveClients(ActiveClients.GetUpperBound(0)) = New TcpClient()
				ActiveClients(ActiveClients.GetUpperBound(0)) = TCPListen.AcceptTcpClient
				ns = ActiveClients(ActiveClients.GetUpperBound(0)).GetStream
				Console.WriteLine("Conectou")
			End If
			Try
				For i = 1 To ActiveClients.GetUpperBound(0)
					If (ActiveClients(i).GetStream.DataAvailable) Then
						ns = ActiveClients(i).GetStream
						If ns.CanRead Then
							Dim bytes(ActiveClients(i).ReceiveBufferSize) As [Byte] '= Text.Encoding.UTF8.GetBytes("aoooooooo")
							ns.Read(bytes, 0, CInt(ActiveClients(i).ReceiveBufferSize))
							Dim received As String = System.Text.Encoding.Default.GetChars(bytes)
							'MsgBox(received)
							Console.WriteLine(" ", received)
							EnviaMsg(i, received)
							'Console.SetOut(New System.IO.StringWriter(System.Text.Encoding.Default.GetChars(bytes)))
							'Dim bytess As [Byte]() = System.Text.Encoding.Default.GetBytes(Console.ReadLine)
							'ns.Write(bytess, 0, CInt(bytess.Length))
						End If
					End If
				Next
			Catch ex As Exception
			End Try
		Loop
		TCPListen.Stop()
	End Sub
	Public Sub EnviaMsg(ByVal Emitente As Integer, ByVal Msg As String)
		For i As Integer = 1 To ActiveClients.GetUpperBound(0)
			If (Not Emitente = i) Then
				ns = ActiveClients(i).GetStream
				Dim bytess As [Byte]() = System.Text.Encoding.Default.GetBytes(Msg)
				ns.Write(bytess, 0, CInt(bytess.Length))
			End If
		Next
	End Sub
End Module

Código do cliente:

Imports System.Net.Sockets

Public Class Form1
	Dim TCPCliente As TcpClient

	Dim ns As NetworkStream
	Public tr As System.Threading.Thread

	Delegate Sub MudaValorCallBack(ByRef TXT As TextBox, ByVal valor As String)
	Public Sub MudaValor(ByRef TXT As TextBox, ByVal valor As String)
		If (Me.InvokeRequired) Then
			Dim CallBack As MudaValorCallBack = New MudaValorCallBack(AddressOf MudaValor)
			Me.Invoke(CallBack, TXT, valor)
		Else
			TXT.Text = valor
		End If
	End Sub

	Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
		TCPCliente = New TcpClient(InputBox("Digita o IP"), 9999)
		'TCPCliente.Connect()
		ns = TCPCliente.GetStream
		tr = New System.Threading.Thread(AddressOf RecebeMensagens)
		tr.IsBackground = True
		tr.Start()
	End Sub

	Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
		If ns.CanWrite Then
			Dim bytes As [Byte]() = System.Text.Encoding.Default.GetBytes(TextBox1.Text)
			ns.Write(bytes, 0, bytes.Length)
		End If
	End Sub

	Private Sub RecebeMensagens()
		While True
			Try
				If ns.CanRead Then
					Dim bytes(TCPCliente.ReceiveBufferSize) As [Byte]
					ns.Read(bytes, 0, CInt(TCPCliente.ReceiveBufferSize))
					Dim s As String = CStr(System.Text.Encoding.Default.GetChars(bytes))
					MudaValor(TextBox1, s)
				End If
			Catch ex As Exception
			End Try
		End While
	End Sub

End Class

 

Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Troquei, mas sem sucesso. Achei que podia ser por causa de um computador ser Vista e o outro XP, coloquei o programa em dois computadores XP e não funcionou.

 

O estranho é que eu peguei um componente WinSock (o mesmo do VB6) e consegui fazer conectar. Mas não queria usar ele. Com ele vai dar muito trabalho pra fazer mais de uma conexão.

 

Sei lá, vo continua procurando vejo se acho algo, se achar posto aqui.

 

Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.