Ver Mensaje Individual
  #1 (permalink)  
Antiguo 27/01/2005, 16:05
chcma
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 21 años, 8 meses
Puntos: 7
Problema VB.NET introduciendome con TcpListener y TcpClient

Buenas noches !!!

Bueno, este post creo que va a ser un poco largo, asi que espero que haya alguien con paciencia y me heche un cable.

Bueno, la cuestión es que me estoy iniciando con esto de los "Sockets", estoy empezando con TcpClient y TcpServer.

Hice un pequeño TcpClient, creando una nueva clase que hereda de TcpClient, para asi poder usar más metodos que trae:


*************************************
PROYECTO CLIENTE
*************************************

Class ClienteTCP
Inherits TcpClient

Private HostServidor As String
Private Puerto As Int16
Private netStream As NetworkStream

Public Sub New(ByVal host As String, ByVal port As Int16)
HostServidor = host
Puerto = port
End Sub

Public Function EstaConectado() As Boolean
If Me.Active Then
Return True
Else
Return False
End If
End Function

Public Sub Conectar()
Try
Me.Connect(Me.HostServidor, Me.Puerto)
Catch ex As Exception
MessageBox.Show(ex.Message, "Error al Conectar", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub

Public Sub EnviarDatos()
netStream = Me.GetStream
If netStream.CanWrite Then
Dim Bytes() As Byte = Encoding.UTF8.GetBytes("Probando")
netStream.Write(Bytes, 0, Bytes.Length)

Bytes = Encoding.UTF8.GetBytes("Otra movida")
netStream.Write(Bytes, 0, Bytes.Length)

Bytes = Encoding.UTF8.GetBytes("")
netStream.Write(Bytes, 0, Bytes.Length)
Else
Throw New Exception("Error al escribir")
Return
End If
End Sub

************
En el formulario
************
Private Sub Form1_Load(ByVal sender As System.Object, .....
Dim Cliente As ClienteTCP
Cliente = New ClienteTCP("localhost", 1500)
Cliente.Conectar()
If Cliente.EstaConectado Then
MsgBox("Todo bien")
Cliente.EnviarDatos()
End If
End Sub

*********************************************
FIN PROYECTO CLIENTE
*********************************************


Este TcpClient tiene que mandar información al servidor, la manda y el servidor la recibe sin problemas. Despues, si cierro la aplicación cliente, el servidor me dice que tiene un error.

"Información adicional: No se puede escribir datos de en la conexión de transporte."


**********************************************
PROYECTO SERVIDOR
**********************************************

Dim Servidor As TcpListener = New TcpListener(IPAddress.Any, 1500)

Private Sub Form1_Load(ByV......
Servidor.Start()

Dim client As TcpClient = Servidor.AcceptTcpClient()
Dim stream As NetworkStream = client.GetStream()
Dim i As Int32
Dim bytes(1024) As Byte
Dim data As String = Nothing

' Loop to receive all the data sent by the client.
i = stream.Read(bytes, 0, bytes.Length)
While (i <> 0)
' Translate data bytes to a ASCII string.
Data = System.Text.Encoding.ASCII.GetString(bytes, 0, i)
MsgBox([String].Format("Received: {0}", data))
i = stream.Read(bytes, 0, bytes.Length)
End While
stream.close
End Sub
***********************************************
FIN PROYECTO SERVIDOR
***********************************************

Espero que no os parezca mucho lo que he puesto y que nun se me mosqueen esos moderadores . . . .

Bueno, pues tengo unas de dudillas, que por más que me peleo, no soy quién a resolver haber que os parece:

1-. Al cerrar el cliente, ¿Como podría hacer que el servidor no me de ese error y que siga escuchando por posibles conexiones?

2-.
Dim Servidor As TcpListener = New TcpListener(IPAddress.Any, 1500)

Aqui le digo al servidor que escuche por cualquier IP que tenga el equipo, ¿Como podría indcar que solo escuche por una IP específica?


Bueno, pues eso es todo, nuevamente, si les parece que es una exageración de texto lo que he puesto aqui, les pido disculpas.

Y desde ya, muchas gracias por la buena ayuda ofrecida siempre acá.

Saludos
__________________
Charlie.