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!! 
  
 
