void ClientReadThread(object clientObj) { PipeClient client = (PipeClient)clientObj; FileStream stream = client.Stream; byte[] buf = new byte[BUFFER_SIZE]; while (true) { int bytesRead = 0; int msgLen = 0; try { bytesRead = stream.Read(buf, 0, 2); if (2 != bytesRead) { bytesRead = 0; break; } msgLen = buf[0] + buf[1] * 256; if (msgLen > BUFFER_SIZE) { bytesRead = 0; break; } bytesRead = stream.Read(buf, 0, msgLen); if (bytesRead != msgLen) { bytesRead = 0; break; } } catch { //read error has occurred break; } //client has disconnected if (bytesRead == 0) { break; } byte[] msg = new byte[msgLen]; Array.Copy(buf, msg, msgLen); client.NotifyNewMessage(msg); } stream.Close(); client.FileHandle.Close(); client.NotifyClientDisconnected(); }