miércoles, 2 de julio de 2014

Chat de Texto (Componente WINSOCK) con Visual Basic (VB.NET)

Se trata de una pequeña aplicacion que implementa un Chat de Texto usando el componente Winsock de Microsoft.



Descarga del Proyecto Completo

10 comentarios:

  1. Ey muy bueno todos tus programas, ya me descargue este y funca al 100%; tengo una pregunta que puerto recomendarías para dejarlo constante y permitir al usuario ingresar la ip no más, existe alguna restricción en cuanto a que puerto usar?.
    Trabajé una aplicación parecida en VB6, donde el cliente escribía la dirección IP del servidor y se conectaba, y el servidor siempre escuchaba en port 4500 y el cliente siempre se comunicaba por ese mismo, se puede hacer lo mismo?.
    Muchas gracias de antemano

    ResponderEliminar
    Respuestas
    1. Hola: Si, se puede fijar un puerto tanto en el Receptor como en el Emisor y usar siempre el mismo. (Mientras no utilices 2 aplicaciones diferentes con el mismo puerto a la vez).
      Hay 65536 puertos(desde el 0 a 65535). Los primeros 1024 se utilizan para servicios conocidos (HTTP,FTP, etc.). Yo normalmente recomiendo utilizar puertos por encima del 5000. Lo mejor es utilizar un numero entre 5000 y 65535 que te sea fácil de recordar. Saludos.

      Eliminar
  2. Muchas gracias, me estoy recorriendo todo el blog, y cada vez encuentro más y más cosas útiles. Está muy bueno. Felicitaciones

    ResponderEliminar
  3. Muy buenos todos tus programas, estoy trabajando con los sockets y he notado que envía paquetes de 101 caracteres, es esto algo fijo o se puede modificar?, lo pregunto por que aveces envío dos paquetes seguidos y me los une en uno solo y si juntos sobrepasan los 101 caracteres me lo parte, lo pude solucionar poniendoles una longitud constante con la función Lset, pero pues queria saber que si esa longitud es constante para ajustar todo a esos valores, muchas gracias por todos tus programas he aprendido más que en la U , saludos y espero que sigas así

    ResponderEliminar
  4. Hola: Muchas gracias por tu comentario. No había oído eso de los 101 caracteres. ¿Eso te ocurre con la aplicación de esta pagina o con alguna otra con algún buffer intermedio?. Si es alguna otra y quieres que le eche un vistazo puedes enviarme un enlace de descarga a mi mail :
    vb.tutoriales.abc@gmail.com.
    Saludos.

    ResponderEliminar
  5. Hola, gracias por responder primero te aclaro que me equivoque de tema en el cual escribir, el programa que estoy trabajando es este "Chat de Texto Multicliente (TCP) con Visual Basic (VB.NET)", que no utiliza winsock, de igual forma, mirando ese código encontré esto:
    Public Sub LEER()
    Dim CLIENTE As New NUEVOCLIENTE
    Dim DATOS() As Byte
    Dim IP As IPEndPoint = CLIENTEIP
    CLIENTE = CLIENTES(IP)
    While True
    If CLIENTE.SOCKETCLIENTE.Connected Then
    DATOS = New Byte(100) {}
    Try
    If CLIENTE.SOCKETCLIENTE.Receive(DATOS, DATOS.Length, 0) > 0 Then
    CLIENTE.MENSAJE = Encoding.UTF7.GetString(DATOS)
    CLIENTES(IP) = CLIENTE
    DatosRecibidos(IP)
    Else
    ahí es donde se define la longitud de lo que se lee y envía, solo quería tener claro si en alguna parte se estipulaba este parámetro para trabajar tranquilamente con el, te agradezco todo los aportes que haces, no he probado cambiando esa longitud de 100, no me queda tiempo tengo que entregar lo que estoy haciendo y solo me inquietaba la longitud de los paquetes.

    ResponderEliminar
    Respuestas
    1. Hola: Efectivamente en esa aplicación hay un buffer en el Servidor (DATOS) y otro en el Cliente (MIBUFFER) DE 100 bytes porque no esperaba que hubiese frases de mas de 100 caracteres. No hay problema en modificar tanto el Cliente como el Servidor y poner por ejemplo 1024.
      Lo que no consigo reproducir es lo de que se junten dos envios.
      ¿Puedes decirme en que casos ocurre?.
      Lo que puedes probar para ese caso es incluir la instrucción:
      Threading.Thread.Sleep(300)
      En los procedimientos TextBoxMENSAJE_KeyDown tanto en el Cliente como en el Servidor para crear un tiempo de espera entre dos envios.
      Saludos.

      Eliminar
  6. Tu solución me cae como anillo al dedo, gracias por prestar interés a los comentarios, y los dos envíos juntos me sucede porque el envío no lo activo cuando doy "enter " si no por programación, el programa está ejecutando la rutina y envía de esta forma
    ENVIARTODOS("orden1"), luego ejecuta otro pedazo de rutina y hago
    ENVIARTODOS("orden2"), aclaro que estos renglones no están juntos ni consecutivos se ejecutan algunas instrucciones antes, pero me sucedía que los clientes recibían "orden1orden2", como te dije lo solucioné llenado el buffer con Lset(orden1,100) y me llenaba de espacios en blanco hasta completar 100, pero tu solución me parece mas Pro. Gracias nuevamente

    ResponderEliminar
  7. Hola: Me alegro de que por fin te funcione. Saludos.

    ResponderEliminar