Pipe communication using threads
<p>I have two exes client.exe and server.exe.They communicate with each other by using pipes.They works fine when the server only listens client requests and send response to the clients.
    But Now the requirement is both exe's contains client pipe and server pipe.So each exe contains two methods one is serverpipe() and clientpipe().those function are in a thread are not communicating with each other.First client and server communicates properly</p>

<p>Client.EXE :
<code></p>

<pre><code>public static void Main(string[] Args)
{
    PipeClient obj=new PipeClient();
    obj.client();
    Thread startserver = new Thread(new ThreadStart(obj.server));
    startserver.Start();
}


public void client()
{
    int cnt =0;
    while (true)
    {
       System.IO.Pipes.NamedPipeClientStream pipeClient = new System.IO.Pipes.NamedPipeClientStream(".", "\\\\.\\pipe\\SamplePipe1", System.IO.Pipes.PipeDirection.InOut, System.IO.Pipes.PipeOptions.None);

        if (pipeClient.IsConnected != true) { pipeClient.Connect(); }

        StreamReader sr = new StreamReader(pipeClient);
        StreamWriter sw = new StreamWriter(pipeClient);

        string temp;
        temp = sr.ReadLine();

        if (temp == "Waiting")
        {
            try
            {
                cnt++;
                sw.WriteLine("clientSide Message " + cnt);
                sw.Flush();
                Thread.Sleep(10000);

            }
            catch (Exception ex) { throw ex; }
        }
        else
        {

        }
        pipeClient.Close();
    } 

}
public void server()
{
    StreamWriter sw1 = new StreamWriter("C:\\ServerEXE\\serverdataFile0.txt", true);

    System.IO.Pipes.NamedPipeServerStream pipeServer = new System.IO.Pipes.NamedPipeServerStream("\\\\.\\pipe\\SamplePipeSend1", System.IO.Pipes.PipeDirection.InOut, 4);

    sw1 = new StreamWriter("C:\\ServerEXE\\serverdataFile2.txt", true);

    sw1.Close();

    StreamReader sr = new StreamReader(pipeServer);
    StreamWriter sw = new StreamWriter(pipeServer);

    do
    {
        try
        {
            pipeServer.WaitForConnection();
            string test;
            sw.WriteLine("Waiting");
            sw.Flush();
            pipeServer.WaitForPipeDrain();
            test = sr.ReadLine();
            sw1 = new StreamWriter("C:\\ServerEXE\\serverdataFile2.txt",true);
            sw1.WriteLine(test);
            sw1.Close();
        }

        catch (Exception ex)
        { throw ex; }

        finally
        {
            pipeServer.WaitForPipeDrain();
            if (pipeServer.IsConnected) { pipeServer.Disconnect(); }
        }
    } while (true);
}
</code></pre>

<p>}</p>

<p></p>

<p>ServerEXE :
</p>

<pre>public static void Main()
{
    PipeServer obj = new PipeServer();
    obj.server();
    Thread startserver = new Thread(new ThreadStart(obj.client));
    startserver.Start();
}

public void server()
{
    System.IO.Pipes.NamedPipeServerStream pipeServer = new System.IO.Pipes.NamedPipeServerStream("\\\\.\\pipe\\SamplePipe1", System.IO.Pipes.PipeDirection.InOut, 4);

    StreamReader sr = new StreamReader(pipeServer);
    StreamWriter sw = new StreamWriter(pipeServer);

    do
    {
        try
        {
            pipeServer.WaitForConnection();
            string test;
            sw.WriteLine("Waiting");
            sw.Flush();
            pipeServer.WaitForPipeDrain();
            test = sr.ReadLine();
            Console.WriteLine(test);
        }

        catch (Exception ex)
        { throw ex; }

        finally
        {
            pipeServer.WaitForPipeDrain();
            if (pipeServer.IsConnected) { pipeServer.Disconnect(); }
        }
    } while (true);
}

public void client()
{
    int cnt = 0;
    while (true)
    {
        System.IO.Pipes.NamedPipeClientStream pipeClient = new System.IO.Pipes.NamedPipeClientStream(".", "\\\\.\\pipe\\SamplePipeSend1", System.IO.Pipes.PipeDirection.InOut, System.IO.Pipes.PipeOptions.None);

        if (pipeClient.IsConnected != true) { pipeClient.Connect(); }

        StreamReader sr = new StreamReader(pipeClient);
        StreamWriter sw = new StreamWriter(pipeClient);

        string temp;
        temp = sr.ReadLine();

        if (temp == "Waiting")
        {
            try
            {
                cnt++;
                sw.WriteLine("clientSide Message " + cnt);
                sw.Flush();
                Thread.Sleep(10000);

            }
            catch (Exception ex) { throw ex; }
        }
        else
        {

        }
        pipeClient.Close();
    }

}
</code></pre>

<p>}</p>

<p></p>
