Ver Mensaje Individual
  #4 (permalink)  
Antiguo 04/07/2009, 09:08
ErCaZa
 
Fecha de Ingreso: noviembre-2007
Mensajes: 141
Antigüedad: 16 años, 6 meses
Puntos: 2
Respuesta: [AYUDA] Algo parecido a Snifear packets

No se que pasa pero no me funciona :S es como si los datos cambiaran mira te pongo el codigo que utilizo

Uso las clases de Elguille sockets modificadas:
Solo pondre las cosas que cambie:
----------------
Clase Cliente
----------------
Código vb:
Ver original
  1. Public Sub EnviarDatos(ByVal Datos() As Byte)
  2.         Dim BufferDeEscritura() As Byte
  3.         BufferDeEscritura = Datos
  4.         If Not (Stm Is Nothing) Then
  5.             'Envio los datos al Servidor
  6.            Stm.Write(BufferDeEscritura, 0, BufferDeEscritura.Length)
  7.         End If
  8.     End Sub
  9. 'Envia los datos como array Byte()

Código vb:
Ver original
  1. Private Sub LeerSocket()
  2.         Dim BufferDeLectura() As Byte
  3.         While True
  4.             Try
  5.                 BufferDeLectura = New Byte(65535) {}
  6.                 'Me quedo esperando a que llegue algun mensaje
  7.                Stm.Read(BufferDeLectura, 0, BufferDeLectura.Length)
  8.                'Genero el evento DatosRecibidos, ya que se han recibido datos desde el Servidor
  9.                RaiseEvent DatosRecibidos(BufferDeLectura)
  10.             Catch e As Exception
  11.                 Exit While
  12.             End Try
  13.         End While
  14.         'Finalizo la conexion, por lo tanto genero el evento correspondiente
  15.        RaiseEvent ConexionTerminada()
  16.     End Sub
  17. 'Lee los datos como array byte()


Código vb:
Ver original
  1. Public Event DatosRecibidos(ByVal datos() As Byte)
  2. 'Variable

-------------------
Clase Servidor
-------------------
Código vb:
Ver original
  1. Public UltimosDatosRecibidos() As Byte 'Ultimos datos enviados por el cliente

Código vb:
Ver original
  1. Public Function ObtenerDatos(ByVal IDCliente As Net.IPEndPoint) As Byte()
  2. 'Una función del tipo Byte()

Código vb:
Ver original
  1. Public Sub EnviarDatos(ByVal IDCliente As Net.IPEndPoint, ByVal Datos() As Byte)
  2.         Dim Cliente As InfoDeUnCliente
  3.         'Obtengo la informacion del cliente al que se le quiere enviar el mensaje
  4.        Cliente = Clientes(IDCliente)
  5.         'Le envio el mensaje
  6.        Cliente.Socket.Send(Datos)
  7.     End Sub
  8. 'Envio los datos de forma array Byte()

-----------------------
Aplicación Servidor
-----------------------
Código vb:
Ver original
  1. Private Sub WinSockServer_DatosRecibidos(ByVal IDTerminal As System.Net.IPEndPoint) Handles WinSockServer.DatosRecibidos
  2.         'Muestro quien envio el mensaje
  3.        IDTerminal_Jugador_Actual = IDTerminal
  4.         Dim Datos() As Byte = WinSockServer.ObtenerDatos(IDTerminal)
  5.         Log_Servidor("El serivodor ha recibo los datos correctamente")
  6.         WinSockCliente.EnviarDatos(Datos)
  7.     End Sub

Código vb:
Ver original
  1. Private Sub WinSockServer_NuevaConexion(ByVal IDTerminal As System.Net.IPEndPoint) Handles WinSockServer.NuevaConexion
  2.         'Muestro quien se conecto
  3.        Log_Servidor("Nuevo Jugador intentando acceder al servidor desde la IP: " & IDTerminal.Address.ToString & ",Puerto: " & IDTerminal.Port)
  4.         WinSockCliente.IPDelHost = "localhost"
  5.         WinSockCliente.PuertoDelHost = 3723
  6.         WinSockCliente.Conectar()
  7.     End Sub

Código vb:
Ver original
  1. Public Sub EnviarDatos(ByVal Datos() As Byte)
  2.         Dim Cliente As InfoDeUnCliente
  3.         'Recorro todos los clientes conectados, y les envio el mensaje recibido
  4.        'en el parametro Datos
  5.        For Each Cliente In Clientes.Values
  6.             EnviarDatos(Cliente.Socket.RemoteEndPoint, Datos)
  7.         Next
  8.     End Sub

----------------------
Aplicación Cliente
----------------------
Código vb:
Ver original
  1. Private Sub WinSockCliente_DatosRecibidos(ByVal datos() As Byte) Handles WinSockCliente.DatosRecibidos
  2.         Log_Cliente("El cliente ha enviado los datos bien")
  3.         WinSockServer.EnviarDatos(datos)
  4.     End Sub

Código vb:
Ver original
  1. Private Sub WinSockCliente_ConexionTerminada() Handles WinSockCliente.ConexionTerminada
  2.         Log_Cliente("La conexión con la IP: " & IDTerminal_Jugador_Actual.Address.ToString & ", ha finalizado")
  3.         WinSockServer.Cerrar(IDTerminal_Jugador_Actual)
  4.     End Sub

Y esto es todo, sabes donde puedo estar fallando?

Última edición por ErCaZa; 04/07/2009 a las 09:16