Ver Mensaje Individual
  #2 (permalink)  
Antiguo 10/06/2008, 10:47
vilagutv7
 
Fecha de Ingreso: julio-2006
Mensajes: 150
Antigüedad: 18 años, 6 meses
Puntos: 0
Respuesta: Sockets Hashtable

/*****Metodos Send y Receive

public int SendData(Socket sock, byte[] data)
{
int total = 0; //Este es la cantidad enviada del mensaje
int size = data.Length; // Este es el tamaño del mensaje
int dataLeft = size; //Este es la parte del mensaje que no se ha enviado
int sent; //Esto es lo que se envio en esta sesion

//este sera el tamaño del mensaje que epxlique arriba
byte[] dataSize = new byte[4];
dataSize = BitConverter.GetBytes(size); //obtenemos los bytes de 'size'
sent = sock.Send(dataSize);//enviamos el tamañom primero, un byte[] de 4

//ahora enviaremos el mensaje....
while (total < size)
{
//La funcuion Send nos devuelve un entero de cuanta cantidad logro enviar
//Entonces mientras no se haya enviado todo el mensaje este ciclo se
//ejecuta
sent = sock.Send(data, total, dataLeft, SocketFlags.None);
total += sent;
dataLeft -= sent;
}
return total; //regresamos el total que enviamos
}

//Necesitamos un socket para recibir
public byte[] ReceiveData(Socket sock)
{
int totalRecv = 0; //la cantidad total recibida
int recv; //la cantidad recibida individualmente
byte[] dataSize = new byte[4]; //este sera el tamaño del mensaje en byte[]
int size; //Este sera el tamaño en entero
int dataLeft = 0; //Esto nos indica cuanta informacion nos falta recibir

recv = sock.Receive(dataSize, 0, 4, SocketFlags.None);//recibimos el tamaño
size = BitConverter.ToInt32(dataSize, 0);//lo pasamos a un entero
dataLeft = size; //asigamos lo que nos falta recibir
byte[] data = new byte[size]; //creamos un array de byte[] del tamaño del mensaje

while (totalRecv < size)
{
//empezamos a recibir
recv = sock.Receive(data, totalRecv, dataLeft, SocketFlags.None);
if (recv == 0)
{
//cuando se reciba 0 es que el cliente se desconecto ...
//entonces rompemos el ciclo.
data = Encoding.ASCII.GetBytes("exit");
break;
}
totalRecv += recv;
dataLeft -= recv;
}
return data; //regresamos el byte[] que recibimos
}