Ver Mensaje Individual
  #1 (permalink)  
Antiguo 12/07/2005, 18:14
chcma
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 11 meses
Puntos: 7
Sockets Asyncronos (VB.NET WinForms)

Hola buenas noches !!!

Verán, mi intención es crear un servidor de Sockets, el cual, reciba a cualquier cliente y gestione en el acto lo que recibe de cada cliente (Cosa que con el TcpListener es casi imposible).

Bien, lo tengo casi hecho, mi servidor de Sockets, recibe a los clientes, y cada cliente manda un Mensaje, y este servidor lo procesa correctamente. Sin embargo, el cliente cuando manda un segundo Mensaje (Sin Haberse deconectado), el servidor NI LO PROCESA.

Estoy desesperado, llevo con esto SIGLOS, me voy a tomar la libertad de poner mi código fuente, para ver si algún guru puede hecharme un cable y decirme por que si procesa mi primer mensaje pero no los demás.

Si algun moderador decide quitar el post, por poner tanto texto, lo entenderé, pero con lo desesperado k estoy, nun tengo ná k perder.




**********************
SERVIDOR SOCKETS
**********************
Imports System.Text
Imports System.Threading
Imports System.Net
Imports System.Net.Sockets


Public Class Form1
Inherits System.Windows.Forms.Form


CODIGO GENEREADO ....


'Objetos
Private objHebra As Thread
Private objSocket As SocketAndBuffer
Private objServidor As TcpListener



Private Sub btnEscuchar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEscuchar.Click
objHebra = New Thread(AddressOf Escuchar)
objHebra.IsBackground = True
objHebra.Start()
End Sub



Private Sub Escuchar()
objServidor = New TcpListener(IPAddress.Any, 2040)
objServidor.Start()

While True
objSocket = New SocketAndBuffer
objSocket.Socket = objServidor.AcceptSocket
objSocket.Socket.BeginReceive(objSocket.Buffer, 0, objSocket.Buffer.Length, SocketFlags.None, _
AddressOf RecibiendoAsync, objSocket)
End While
End Sub



Private Sub RecibiendoAsync(ByVal ar As IAsyncResult)
Dim objSocketInd As SocketAndBuffer
objSocketInd = CType(ar.AsyncState, SocketAndBuffer)

Dim BytesRecibidos As Integer
BytesRecibidos = objSocketInd.Socket.EndReceive(ar)

If BytesRecibidos > 0 Then
Dim DatoRecibido As String
DatoRecibido = Encoding.ASCII.GetString(objSocketInd.Buffer, 0, BytesRecibidos)
Thread.Sleep(5000)
lbLista.Items.Add(DatoRecibido)

Array.Clear(objSocketInd.Buffer, 0, objSocketInd.Buffer.Length)
objSocketInd.Socket.BeginReceive(objSocketInd.Buff er, 0, objSocketInd.Buffer.Length, SocketFlags.None, AddressOf RecibiendoAsync, objSocketInd)
End If
End Sub
End Class


Public Class SocketAndBuffer
Public Socket As Socket
Public Buffer(1024) As Byte
End Class




***************************
CLIENTE SOCKETS
***************************

Imports System.Net
Imports System.Net.Sockets
Imports System.Text.Encoding

Public Class Form1
Inherits System.Windows.Forms.Form

Private objSock As TcpClient

Private Sub btnConecta_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConecta.Click
objSock = New TcpClient
objSock.Connect("localhost", 2040)
End Sub


Private Sub btnEnvia_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEnvia.Click
Dim bytes(1024) As Byte
bytes = System.Text.Encoding.ASCII.GetBytes("Hola")

Dim StreamCliente As NetworkStream
StreamCliente = objSock.GetStream
StreamCliente.Write(bytes, 0, bytes.Length)
StreamCliente.Flush()
End Sub
End Class


********************
FIN
********************

En fin, si puede alguien ayudarme, le estaré enteramente agradecido. Desde ya, muchas gracias.

Saludos compadres.
__________________
Charlie.

Última edición por chcma; 13/07/2005 a las 06:08