Foros del Web » Programación para mayores de 30 ;) » .NET »

Aplicacion Cliente/servidor

Estas en el tema de Aplicacion Cliente/servidor en el foro de .NET en Foros del Web. Hola... Estoy trabajado en una aplicación cliente/servidor, para ello utilizo TcpClient, TcpListener y socket. Fuera de otras cosillas bueno para hacerla corta solo pondré lo ...
  #1 (permalink)  
Antiguo 15/08/2005, 01:05
 
Fecha de Ingreso: abril-2005
Mensajes: 25
Antigüedad: 19 años
Puntos: 0
Aplicacion Cliente/servidor

Hola...
Estoy trabajado en una aplicación cliente/servidor, para ello utilizo TcpClient, TcpListener y socket. Fuera de otras cosillas bueno para hacerla corta solo pondré lo necesario, puesto que el código es re extenso.

La conexión:
para hacer la conexión este es el orden cronologico que utilizo:
Servidor:
En el servidor declaro esto, para que escuche al cliente de red TCP:
Código:
1.- Private tcpLsn As New TcpListener(Puerto_Escucha)
2.- Public Socket As Socket
De esta forma le digo que escuche!!
Código:
3.-  tcpLsn.Start()
De esta forma guardo el socket que utilizo para mantener la conexión (Espero al cliente)
Código:
4.- Socket = tcpLsn.AcceptSocket()
Cliente:
Aquí declaro 2 variables dentro de la clase
Código:
5.- Private tcpClnt As TcpClient
6.- Private Flujo As Stream
Y para hacer la conexión uso esto:

Código:
7.- tcpClnt = New TcpClient
Le indico la IP y el Puerto que debe utilizar
Código:
8.- tcpClnt.Connect(IP_Host, Puerto_Host)
Devuelve la NetworkStream usada para enviar y recibir datos.
Código:
9.- Flujo = tcpClnt.GetStream()
Bueno de esta forma conecto las 2 aplicaciones y la verdad no hay problema el asunto ocurre al enviar datos, desde el servidor al cliente.

Lo cual lo hago de esta forma:
Desde el servidor utilizo el socket:

Código:
Socket.Send(Encoding.ASCII.GetBytes(Datos.Trim))
Donde Datos es una variable de tipo string

Y desde el cliente se encuentra el flujo

Código:
BufferDeLectura = New Byte(50) {}
Flujo.Read(BufferDeLectura, 0, BufferDeLectura.Length)
Y lo transformo el buffer de esta forma a string para ser leído

Código:
Encoding.ASCII.GetString(BufferDeLectura).Trim
Justo aquí comienza el problema ya que cuando utilizo, el string que me entrega el cliente en una concatenación para genera una instrucción SQL y al ejecutar la instrucción el programa se cayo, y me tiro el siguiente error:

System.Data.SqlClient.SqlException: Los datos de cadena o binarios se truncarían.

Y al revisar la instrucción SQL. Me di cuenta de que faltaba parte de la instrucción, a todo esto el mensaje que envié era “Rechazo” y claro, el mensaje llego pero al parecer tenía espacios en blanco después del final…
Entonces lo primero que intente fue hacer un trim pero no funciono, luego trate de pasarla por otra variable, pero tampoco funciono, en síntesis la instrucción SQL quedo así:

UPDATE RecepcionPupilo SET Estado = 'Rechazo

Segun lo que me indica el Error, enviado es obvio que se salio del tamaño de el tipo que le di al campo en la base, el asunto es por que??

De ante manos muchas gracias por su tiempo..
Víctor Rodríguez
Santiago de chile


Recuerden Enseñar es la mejor forma de aprender

Última edición por victor211079; 15/08/2005 a las 01:12
  #2 (permalink)  
Antiguo 15/08/2005, 17:43
 
Fecha de Ingreso: abril-2005
Mensajes: 25
Antigüedad: 19 años
Puntos: 0
ya solucione el problema, ocurria debido a esto :

Este es el codigo que existe en el cliente y el problema ocurria cuando el mensaje era mas chico que el tamaño del BufferDeLectura (menor que 50)
Código:
BufferDeLectura = New Byte(50) {}
Flujo.Read(BufferDeLectura, 0, BufferDeLectura.Length)
Encoding.ASCII.GetString(BufferDeLectura).Trim
y esta fue la forma que solucione el problema:

Código:
BufferDeLectura = New Byte(50) {}
'Me quedo esperando a que llegue algun mensaje 
Dim n As Integer = Flujo.Read(BufferDeLectura, 0, BufferDeLectura.Length)
'De esta forma transformo la informacion
Código:
Encoding.ASCII.GetString(BufferDeLectura, 0, n)

muchas gracias por su tiempo..
Víctor Rodríguez
Santiago de chile


Recuerden Enseñar es la mejor forma de aprender
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:19.