Buenas estoy haciendo una aplicacion cliente servidor la cual quiero que en el servidor lea una ruta pasada por el cliente, lo cual buscara una tabla de hash almacenada en un archivo y luego el servidor se la envie de vuelta al cliente los metodos que estoy usando son los siguientes, pero aun no implemento que sea con las hashtable como podria modificar esto para que en vez de pase string pase Hashtables?
/*****Cliente
static void Main(string[] args)
{
byte[] data = new byte[1024]; //Cramos un byte[> para recibir el mensaje
//de bienvenida del servidor
int sent; //una variable que nos dice cuanto hemos enviado
IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("127.0.0.1" ), 9050);
//Creamos un IPEndPoint con el ip del servidor y puerto del servidor
//al que deseamos conectarnos, en este caso lo uso local
//Creamos el socket igual al del servidor
Socket server = new Socket(AddressFamily.InterNetwork,SocketType.Strea m,ProtocolType.Tcp);
try
{
server.Connect(ipep);//Intentamos conectar el socket
Console.WriteLine("Conectado con el servidor {0}", ipep.Address);
}
catch (SocketException)
{
//Si hay excepcion imprimimos error y salimos del programa con return
Console.WriteLine("No se pudo conectar con el servidor {0}", ipep.Address);
return;
}
FuncionesConexion conex = new FuncionesConexion();
try
{
data = conex.ReceiveData(server); //Recibimos la bienvenida del servidor
string stringData = Encoding.ASCII.GetString(data);
Console.WriteLine(stringData);
}
catch (SocketException)
{
//Si hay error imprimios y nos salimos por que no hay conexion
Console.WriteLine("No se ha encontrado conexion con el servidor {0}", ipep.Address);
return;
}
while (true)
{
string message = Console.ReadLine(); //Leemos el input que queremos enviar
try
{//Enviamos el mensaje.
sent = conex.SendData(server, Encoding.ASCII.GetBytes(message));
}
catch (SocketException)
{//Si hay excepcion nos salimos pq no hay conexion
Console.WriteLine("No se ha encontrado conexion con el servidor {0}", ipep.Address);
return;
}//Si se ejeucta el comando exit nos salimos
try
{
data = conex.ReceiveData(server); //Recibimos la bienvenida del servidor //string
Hashtable stringData = Encoding.ASCII.GetString(data);
Console.WriteLine(stringData);
}
catch (SocketException)
{
//Si hay error imprimios y nos salimos por que no hay conexion
Console.WriteLine("No se ha encontrado conexion con el servidor {0}", ipep.Address);
return;
}
if (message == "exit" )
break;
}
//Indicamos que nos desocnectamos y cerramos el socket
Console.WriteLine("Desconectando del servidor {0}", ipep.Address);
server.Shutdown(SocketShutdown.Both);
server.Close();
}
/*****Servidor
static void Main(string[] args)
{
byte[] data = new byte[1024]; //creamos un byte[] para enviar la bienvenida
IPEndPoint ipep = new IPEndPoint(IPAddress.Any,9050);
//Con el IpAdress.Any esuchamos en cualquier interfaz de red.. y el 9050
//es el puerto en el que escuharemos
//creamos un socket de tipo internwtwork, stream y tcp
Socket newsock = new Socket(AddressFamily.InterNetwork,SocketType.Strea m,ProtocolType.Tcp);
try
{
newsock.Bind(ipep); //lo bindeamos para que se ancle al puerto especificaco
}
catch (SocketException)
{
//si aqui hay error es que ese puerto esta en uso y entonces es probable
//que otra instancia de este programa ya este corriendo
Console.WriteLine("Al parecer otra instancia del servidor ya esta corriendo" );
return; //si es asi damos un return para salirnos de la funcion y terminar
//el programa
}
newsock.Listen(1); //escuchamos con el socket en el puerto especifaco
Console.WriteLine("Waiting for a client..." );
Socket client = newsock.Accept(); //Esto acepta la conexion cuando recibe
//una peticion... esto se queda esperando hasta que ocurra
IPEndPoint newclient = (IPEndPoint)client.RemoteEndPoint; //creamos un IPEndPoint
//con la informacion del cliente
Console.WriteLine("Connected with {0} on port {1}", newclient.Address, newclient.Port);
//imprimimos en la pantalla que se conecto un cliente
string welcome = "Welcome to my test server 1.0";
data = Encoding.ASCII.GetBytes(welcome); //Codificamos a byte [> el mensaje
//de bienvenida
FuncionesConexion conex = new FuncionesConexion();
int sent = conex.SendData(client, data); //lo enviamos con nuestra funcion, pasandole
//el socket del cliente y el byte[> con el mensaje
for (int m = 0; m < 2; m++)
{//Este for nos sirve para leer infinitamente los mensajes que nos llegan
try
{
data = conex.ReceiveData(client); //Llama a recibir mensajes del socket cliente
//esto se queda esperando hasta recibir un mensaje
string message = Encoding.ASCII.GetString(data); //si recibimos un
//mensaje entonces lo decoficamos a un string
//Lectura Archivo Binario
FileStream fs = new FileStream("D:\\Ernesto\\Tesis\\Columnas\\"+messag e, FileMode.Open, FileAccess.Read);
try
{
Hashtable a = new Hashtable();
BinaryFormatter bf = new BinaryFormatter();
a = (Hashtable)bf.Deserialize(fs);
}
finally
{
fs.Close();
}
if (message == "exit" ) //si recibimos exit nos salimos..
break;
Console.WriteLine(message); //si no entonces lo imprimimos
data = Encoding.ASCII.GetBytes("Recibido");
sent = conex.SendData(client, data); //lo enviamos con nuestra funcion, pasandole
m--; //restamos al for para que sea infinito...
}
catch (SocketException)
{
Console.WriteLine("No se encontro conexion con el cliente {0}", newclient.Address);
return;
//si enocntramos un error es que se perido la conexion y con el return nos
//salimos de la funcion
}
}
//Damos el mensaje de que se desconecto el cliente XX con puerto XX
Console.WriteLine("Disconnected from {0} on port {1}",newclient.Address,newclient.Port);
//cerramos el socket del cliente
client.Shutdown(SocketShutdown.Both);
client.Close();
//Ceramos el socket con el que escuchamos
newsock.Shutdown(SocketShutdown.Both);
newsock.Close();
}
}
Ahora les adjunto los metodos Send y Receive
Gracias!!