private void server_DataReceived(object sender, DataReceivedEventArgs e)
        {
            string receivedMessage = BytesToString(e.Data);
            txtReceivedMessage.Dispatcher.BeginInvoke(
                delegate(object arg) {
                    txtReceivedMessage.TextContent = "Received message: " + arg.ToString();
                    return null;
                },
                receivedMessage);

            string response = "Response from server for the request '" + receivedMessage + "'";
            e.ResponseData = System.Text.Encoding.UTF8.GetBytes(response);

            if (receivedMessage == "close")
                e.Close = true;
        }
 private void OnDataReceived(DataReceivedEventArgs e)
 {
     if (DataReceived != null)
         DataReceived(this, e);
 }
            private void ProcessRequest()
            {
                const int c_microsecondsPerSecond = 1000000;

                using (clientSocket)
                {
                    while (true)
                    {
                        try
                        {
                            if (clientSocket.Poll(5 * c_microsecondsPerSecond, SelectMode.SelectRead))
                            {
                                // If the butter is zero-lenght, the connection has been closed or terminated.
                                if (clientSocket.Available == 0)
                                    break;

                                byte[] buffer = new byte[clientSocket.Available];
                                int bytesRead = clientSocket.Receive(buffer, clientSocket.Available, SocketFlags.None);

                                byte[] data = new byte[bytesRead];
                                buffer.CopyTo(data, 0);

                                DataReceivedEventArgs args = new DataReceivedEventArgs(clientSocket.LocalEndPoint, clientSocket.RemoteEndPoint, data);
                                socket.OnDataReceived(args);

                                if (args.ResponseData != null)
                                    clientSocket.Send(args.ResponseData);

                                if (args.Close)
                                    break;
                            }
                        }
                        catch (Exception)
                        {
                            break;
                        }
                    }
                }
            }