public class Client
    {
        private Socket socket;
        private AutoResetEvent autoResetEvent;
        private IPEndPoint serverEndPoint;
        private byte[] buffer;
 
        public bool Connect()
        {
            //connection code
            socket.Connect(serverEndPoint);
                       
            //start listening for data
            Debug.Print("Listening");
            socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(OnDataReceived), null);
 
            Thread.Sleep(1000);
            Debug.Print("Return");
        }
 
        //Async method called when data is received.
        private void OnDataReceived(IAsyncResult res)
        {
            //handle data
            Debug.Print("Data received.");
            
            //carry on receiving
            socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(OnDataReceived), null);            
        }
    }