Even though this is an old question and I'm not sure if my suggestion will help anyone but I faced the same error and here is how I solved it. Hopefully this will help another poor soul.
I was seeing the same error "cannot read remote side has closed" , but I was using csharp, Apache.Cassandra namespace and Thrift.dll.
The following is a working snippet,
TSocket socket = null;
TTransport transport = null;
socket = new TSocket("localhost", 9160);
transport = new TFramedTransport(socket);
TProtocol protocol = new TBinaryProtocol(transport);
CassandraClient cassandraClient = new CassandraClient(protocol);
cassandraClient.InputProtocol.Transport.Open();
The trick was to use cassandraClient.InputProtocol.Transport.Open(); rather than transport.open()