public void Dispose() {
try {
if (reader != null) reader.Dispose();
} catch (ObjectDisposedException) {}
try {
if (reader != null) writer.Dispose();
} catch (ObjectDisposedException) {}
try {
if (client != null && client.Connected) {
client.Close();
}
} catch (ObjectDisposedException) {}
}