Ayuda con Sockets - Estoy que reviento...

03/01/2006 - 22:53 por Camilo | Informe spam
Hola Comunidad!!!

Llevaba rato de no participar de este medio de conocimiento... todo debido a
politicas laborales de la empresa en la cual laboraba... pero ahora, gracias
a Dios tengo acceso a esta fuente del saber...

La situación es la siguiente, estoy migrando una aplicación que fue
realizada en Visual Basic 6.0 a Visual Basic .NET (Express) 2005, en vista
de que muchas de las palabras claves cambian, y la definición de muchos
objetos cambia, decidí realizar desde CERO el código, dicha aplicación es
una interface de comunicación entre unas terminales móviles (Lipman Nurit
8320) y un servidor de Base de Datos, para descargar datos de ventas de la
terminal, y cargarle información de artículos en existencia de devuelta...

hasta hay todo muy bien, pero resulta que esta aplicación establece
comunicación via TCP/IP con la terminal Lipman, y esta última le envia por
un puerto configurado previamente, la información sobre los movimientos,
ventas y devoluciones hechas, etc... Pues bien, es en este proceso, donde
patino... inicalmente era cuestion de IP (mi equipo no estaba apuntando al
DNS adecuado), ya esto lo resolví... e hice una prueba a través de Hyper
Terminal, configurandolo para que escuche por el puerto utilizado en la
aplicación y efectivamente me llegan datos, toda la información completa...

Pero en mi aplicacion de .NET, no... estuve revisando código por código,
linea a linea a ver que sucede y todo está tal cual los ejemplos de la MSDN
para realizar un Listener que escuche un puerto X y extraiga el flujo de
datos enviados por el canal... más sin embargo solo logro trar el primera
fila de datos, y el resto de datos, no llegan... y para colmo de males no
saca error de excepción...

Realmente no se que hacer, le he dado vueltas a este asunto y no encuentro
una solución... no en el momento, y con lo poco que conozco de Visual Studio
.NET 2005

Agradezco de ustedes cualesquier luz al respecto...

anexo el fragmento de código que empleo para traer los datos de la terminal
lipman.

Public Shared Sub Main(ByRef frmFormulario As frmPrincipal, ByVal intPuerto
As Integer, ByVal strIpAddress As String)

Try

' Set the TcpListener on port 13000.

Dim tcpServer As New TcpListener(Net.IPAddress.Parse(strIpAddress),
intPuerto)

' Start listening for client requests.

tcpServer.Start()

Dim data As [String] = Nothing

' Enter the listening loop.

While True

frmFormulario.UpdateStatus("Waiting for a connection... ")

' Perform a blocking call to accept requests.

' You could also user server.AcceptSocket() here.

Dim tcpCliente As TcpClient = tcpServer.AcceptTcpClient()

frmFormulario.UpdateStatus("Connected!")

' Get a stream object for reading and writing

Dim nwsLector As NetworkStream = tcpCliente.GetStream()

'Buffer for reading data

Dim bytLector(tcpCliente.ReceiveBufferSize) As [Byte]

nwsLector.Read(bytLector, 0, CInt(tcpCliente.ReceiveBufferSize))

data = Nothing

' Translate data bytes to a ASCII string.

data = System.Text.Encoding.ASCII.GetString(bytLector, 0,
CInt(tcpCliente.ReceiveBufferSize))

frmFormulario.UpdateStatus([String].Format("Receibido: {0}", data))

' Shutdown and end connection

tcpCliente.Close()

tcpServer.Stop()

frmFormulario.UpdateStatus([String].Format("Receibido: {0}", data))

End While

Catch e As SocketException

frmFormulario.UpdateStatus([String].Format("SocketException: {0}", e))

End Try

End Sub 'Main

Preguntas similare

Leer las respuestas

#1 Leonardo Azpurua [mvp vb]
03/01/2006 - 23:34 | Informe spam
Hola, Camilo:

Todavia soy un poco dinosaurio (sigo dedicando el 80% del tiempo a VB6),
pero fíjate en estas líneas de tu procedimiento:

tcpServer.Start()
...
While True
...
tcpServer.Stop()
End While

Una vez que has recibido la primera linea del terminal, cierras el socket de
escucha y nunca mas lo abres. ¿Cómo pretendes obtener ninguna notificacion
adicional de un Listener cerrado?


Salud!


"Camilo" escribió en el mensaje
news:%23azY1%
Hola Comunidad!!!

Llevaba rato de no participar de este medio de conocimiento... todo debido
a
politicas laborales de la empresa en la cual laboraba... pero ahora,
gracias
a Dios tengo acceso a esta fuente del saber...

La situación es la siguiente, estoy migrando una aplicación que fue
realizada en Visual Basic 6.0 a Visual Basic .NET (Express) 2005, en vista
de que muchas de las palabras claves cambian, y la definición de muchos
objetos cambia, decidí realizar desde CERO el código, dicha aplicación es
una interface de comunicación entre unas terminales móviles (Lipman Nurit
8320) y un servidor de Base de Datos, para descargar datos de ventas de la
terminal, y cargarle información de artículos en existencia de devuelta...

hasta hay todo muy bien, pero resulta que esta aplicación establece
comunicación via TCP/IP con la terminal Lipman, y esta última le envia por
un puerto configurado previamente, la información sobre los movimientos,
ventas y devoluciones hechas, etc... Pues bien, es en este proceso, donde
patino... inicalmente era cuestion de IP (mi equipo no estaba apuntando al
DNS adecuado), ya esto lo resolví... e hice una prueba a través de Hyper
Terminal, configurandolo para que escuche por el puerto utilizado en la
aplicación y efectivamente me llegan datos, toda la información
completa...

Pero en mi aplicacion de .NET, no... estuve revisando código por código,
linea a linea a ver que sucede y todo está tal cual los ejemplos de la
MSDN
para realizar un Listener que escuche un puerto X y extraiga el flujo de
datos enviados por el canal... más sin embargo solo logro trar el primera
fila de datos, y el resto de datos, no llegan... y para colmo de males no
saca error de excepción...

Realmente no se que hacer, le he dado vueltas a este asunto y no encuentro
una solución... no en el momento, y con lo poco que conozco de Visual
Studio
.NET 2005

Agradezco de ustedes cualesquier luz al respecto...

anexo el fragmento de código que empleo para traer los datos de la
terminal
lipman.

Public Shared Sub Main(ByRef frmFormulario As frmPrincipal, ByVal
intPuerto
As Integer, ByVal strIpAddress As String)

Try

' Set the TcpListener on port 13000.

Dim tcpServer As New TcpListener(Net.IPAddress.Parse(strIpAddress),
intPuerto)

' Start listening for client requests.

tcpServer.Start()

Dim data As [String] = Nothing

' Enter the listening loop.

While True

frmFormulario.UpdateStatus("Waiting for a connection... ")

' Perform a blocking call to accept requests.

' You could also user server.AcceptSocket() here.

Dim tcpCliente As TcpClient = tcpServer.AcceptTcpClient()

frmFormulario.UpdateStatus("Connected!")

' Get a stream object for reading and writing

Dim nwsLector As NetworkStream = tcpCliente.GetStream()

'Buffer for reading data

Dim bytLector(tcpCliente.ReceiveBufferSize) As [Byte]

nwsLector.Read(bytLector, 0, CInt(tcpCliente.ReceiveBufferSize))

data = Nothing

' Translate data bytes to a ASCII string.

data = System.Text.Encoding.ASCII.GetString(bytLector, 0,
CInt(tcpCliente.ReceiveBufferSize))

frmFormulario.UpdateStatus([String].Format("Receibido: {0}", data))

' Shutdown and end connection

tcpCliente.Close()

tcpServer.Stop()

frmFormulario.UpdateStatus([String].Format("Receibido: {0}", data))

End While

Catch e As SocketException

frmFormulario.UpdateStatus([String].Format("SocketException: {0}", e))

End Try

End Sub 'Main


Respuesta Responder a este mensaje
#2 Camilo
04/01/2006 - 22:51 | Informe spam
Hola leonardo...

Ya estuve observando tu apunte y en parte tienes razón... más no es la causa
del porqué del error...

Aun sigo estudiando el código viejo... el cuento es que cuando uno recibe
de alguien una aplicación y esta no es bien documentada a nivel de código,
queda muy dificil comprender que se está haciendo...

Apenas estoy comprendiendo que fue lo que hizo el compañero...
Adicionalmente estoy estudiando un código, que vi en CodeProject
(http://www.codeproject.com/vb/net/w...dotnet.asp) ... así que todavía
no me quiero adelantar a más conjeturas...

Gracias de todos modos por tu apunte...


Salu2,


Camilo Alfonso Villa Naranjo
Analista Desarrollador Sistemas POS E.U.
3 DCE2003 - 2 DCE2005
Core Group Member AlianzaDev.NET


"Leonardo Azpurua [mvp vb]" <l e o n a r d o (arroba) m v p s (punto) o r g>
escribió en el mensaje news:
Hola, Camilo:

Todavia soy un poco dinosaurio (sigo dedicando el 80% del tiempo a VB6),
pero fíjate en estas líneas de tu procedimiento:

tcpServer.Start()
...
While True
...
tcpServer.Stop()
End While

Una vez que has recibido la primera linea del terminal, cierras el socket
de escucha y nunca mas lo abres. ¿Cómo pretendes obtener ninguna
notificacion adicional de un Listener cerrado?


Salud!


"Camilo" escribió en el mensaje
news:%23azY1%
Hola Comunidad!!!

Llevaba rato de no participar de este medio de conocimiento... todo
debido a
politicas laborales de la empresa en la cual laboraba... pero ahora,
gracias
a Dios tengo acceso a esta fuente del saber...

La situación es la siguiente, estoy migrando una aplicación que fue
realizada en Visual Basic 6.0 a Visual Basic .NET (Express) 2005, en
vista
de que muchas de las palabras claves cambian, y la definición de muchos
objetos cambia, decidí realizar desde CERO el código, dicha aplicación es
una interface de comunicación entre unas terminales móviles (Lipman Nurit
8320) y un servidor de Base de Datos, para descargar datos de ventas de
la
terminal, y cargarle información de artículos en existencia de
devuelta...

hasta hay todo muy bien, pero resulta que esta aplicación establece
comunicación via TCP/IP con la terminal Lipman, y esta última le envia
por
un puerto configurado previamente, la información sobre los movimientos,
ventas y devoluciones hechas, etc... Pues bien, es en este proceso,
donde
patino... inicalmente era cuestion de IP (mi equipo no estaba apuntando
al
DNS adecuado), ya esto lo resolví... e hice una prueba a través de Hyper
Terminal, configurandolo para que escuche por el puerto utilizado en la
aplicación y efectivamente me llegan datos, toda la información
completa...

Pero en mi aplicacion de .NET, no... estuve revisando código por código,
linea a linea a ver que sucede y todo está tal cual los ejemplos de la
MSDN
para realizar un Listener que escuche un puerto X y extraiga el flujo de
datos enviados por el canal... más sin embargo solo logro trar el primera
fila de datos, y el resto de datos, no llegan... y para colmo de males no
saca error de excepción...

Realmente no se que hacer, le he dado vueltas a este asunto y no
encuentro
una solución... no en el momento, y con lo poco que conozco de Visual
Studio
.NET 2005

Agradezco de ustedes cualesquier luz al respecto...

anexo el fragmento de código que empleo para traer los datos de la
terminal
lipman.

Public Shared Sub Main(ByRef frmFormulario As frmPrincipal, ByVal
intPuerto
As Integer, ByVal strIpAddress As String)

Try

' Set the TcpListener on port 13000.

Dim tcpServer As New TcpListener(Net.IPAddress.Parse(strIpAddress),
intPuerto)

' Start listening for client requests.

tcpServer.Start()

Dim data As [String] = Nothing

' Enter the listening loop.

While True

frmFormulario.UpdateStatus("Waiting for a connection... ")

' Perform a blocking call to accept requests.

' You could also user server.AcceptSocket() here.

Dim tcpCliente As TcpClient = tcpServer.AcceptTcpClient()

frmFormulario.UpdateStatus("Connected!")

' Get a stream object for reading and writing

Dim nwsLector As NetworkStream = tcpCliente.GetStream()

'Buffer for reading data

Dim bytLector(tcpCliente.ReceiveBufferSize) As [Byte]

nwsLector.Read(bytLector, 0, CInt(tcpCliente.ReceiveBufferSize))

data = Nothing

' Translate data bytes to a ASCII string.

data = System.Text.Encoding.ASCII.GetString(bytLector, 0,
CInt(tcpCliente.ReceiveBufferSize))

frmFormulario.UpdateStatus([String].Format("Receibido: {0}", data))

' Shutdown and end connection

tcpCliente.Close()

tcpServer.Stop()

frmFormulario.UpdateStatus([String].Format("Receibido: {0}", data))

End While

Catch e As SocketException

frmFormulario.UpdateStatus([String].Format("SocketException: {0}", e))

End Try

End Sub 'Main






Respuesta Responder a este mensaje
#3 Camilo - SISPOS
10/01/2006 - 19:39 | Informe spam
Ya lo resolví... el error resulto ser de CAPA 8 - o BIOS (Bruto Intentando
Operar el Sistema)...

Simplemente al establecer una comunicación via TCP/IP, la comunicación es de
doble vía, el me envia información siempre y cuando yo le responda algo...
eso me hacía falta, responderle al emisor, que recibí información, ya con
ello se logra el proceso de comunicación...

de todos modos, gracias a Dios lo descubrí a tiempo... entre más tarde, peor
sería...


Salu2,


Camilo Alfonso Villa Naranjo
Analista Desarrollador Sistemas POS E.U.
3 DCE2003 - 2 DCE2005
Core Group Member AlianzaDev.NET

"Leonardo Azpurua [mvp vb]" <l e o n a r d o (arroba) m v p s (punto) o r g>
escribió en el mensaje news:
Hola, Camilo:

Todavia soy un poco dinosaurio (sigo dedicando el 80% del tiempo a VB6),
pero fíjate en estas líneas de tu procedimiento:

tcpServer.Start()
...
While True
...
tcpServer.Stop()
End While

Una vez que has recibido la primera linea del terminal, cierras el socket
de escucha y nunca mas lo abres. ¿Cómo pretendes obtener ninguna
notificacion adicional de un Listener cerrado?


Salud!


"Camilo" escribió en el mensaje
news:%23azY1%
Hola Comunidad!!!

Llevaba rato de no participar de este medio de conocimiento... todo
debido a
politicas laborales de la empresa en la cual laboraba... pero ahora,
gracias
a Dios tengo acceso a esta fuente del saber...

La situación es la siguiente, estoy migrando una aplicación que fue
realizada en Visual Basic 6.0 a Visual Basic .NET (Express) 2005, en
vista
de que muchas de las palabras claves cambian, y la definición de muchos
objetos cambia, decidí realizar desde CERO el código, dicha aplicación es
una interface de comunicación entre unas terminales móviles (Lipman Nurit
8320) y un servidor de Base de Datos, para descargar datos de ventas de
la
terminal, y cargarle información de artículos en existencia de
devuelta...

hasta hay todo muy bien, pero resulta que esta aplicación establece
comunicación via TCP/IP con la terminal Lipman, y esta última le envia
por
un puerto configurado previamente, la información sobre los movimientos,
ventas y devoluciones hechas, etc... Pues bien, es en este proceso,
donde
patino... inicalmente era cuestion de IP (mi equipo no estaba apuntando
al
DNS adecuado), ya esto lo resolví... e hice una prueba a través de Hyper
Terminal, configurandolo para que escuche por el puerto utilizado en la
aplicación y efectivamente me llegan datos, toda la información
completa...

Pero en mi aplicacion de .NET, no... estuve revisando código por código,
linea a linea a ver que sucede y todo está tal cual los ejemplos de la
MSDN
para realizar un Listener que escuche un puerto X y extraiga el flujo de
datos enviados por el canal... más sin embargo solo logro trar el primera
fila de datos, y el resto de datos, no llegan... y para colmo de males no
saca error de excepción...

Realmente no se que hacer, le he dado vueltas a este asunto y no
encuentro
una solución... no en el momento, y con lo poco que conozco de Visual
Studio
.NET 2005

Agradezco de ustedes cualesquier luz al respecto...

anexo el fragmento de código que empleo para traer los datos de la
terminal
lipman.

Public Shared Sub Main(ByRef frmFormulario As frmPrincipal, ByVal
intPuerto
As Integer, ByVal strIpAddress As String)

Try

' Set the TcpListener on port 13000.

Dim tcpServer As New TcpListener(Net.IPAddress.Parse(strIpAddress),
intPuerto)

' Start listening for client requests.

tcpServer.Start()

Dim data As [String] = Nothing

' Enter the listening loop.

While True

frmFormulario.UpdateStatus("Waiting for a connection... ")

' Perform a blocking call to accept requests.

' You could also user server.AcceptSocket() here.

Dim tcpCliente As TcpClient = tcpServer.AcceptTcpClient()

frmFormulario.UpdateStatus("Connected!")

' Get a stream object for reading and writing

Dim nwsLector As NetworkStream = tcpCliente.GetStream()

'Buffer for reading data

Dim bytLector(tcpCliente.ReceiveBufferSize) As [Byte]

nwsLector.Read(bytLector, 0, CInt(tcpCliente.ReceiveBufferSize))

data = Nothing

' Translate data bytes to a ASCII string.

data = System.Text.Encoding.ASCII.GetString(bytLector, 0,
CInt(tcpCliente.ReceiveBufferSize))

frmFormulario.UpdateStatus([String].Format("Receibido: {0}", data))

' Shutdown and end connection

tcpCliente.Close()

tcpServer.Stop()

frmFormulario.UpdateStatus([String].Format("Receibido: {0}", data))

End While

Catch e As SocketException

frmFormulario.UpdateStatus([String].Format("SocketException: {0}", e))

End Try

End Sub 'Main






email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida