Some Body
Some Body

Reputation: 2031

Unable to read from stream in C#

I am building a bare bones program that simple delivers a message from server to client.

Now i am successfully able to establish connection between the server and client, however the client program is unable to read from the stream. Here's my code.

Code for server program

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;
using System.Net.Sockets;

namespace chat_client_console
{
    class Program
    {
        static TcpListener listener;
        static void Main(string[] args)
        {
            string name = Dns.GetHostName();
            IPAddress[] address = Dns.GetHostAddresses(name);

            /*
            foreach(IPAddress addr in address)
            {
                Console.WriteLine(addr);
            }*/
            Console.WriteLine(address[1].ToString());
            listener = new TcpListener(address[1], 2055);

            listener.Start();

            Socket soc = listener.AcceptSocket();
            Console.WriteLine("Connection successful");
            Stream s = new NetworkStream(soc);

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

            sw.AutoFlush = true;
            sw.Write("A test message");
            Console.WriteLine("Test message delivered. Now ending the program");

            /*
            string name = Dns.GetHostName();
            Console.WriteLine(name);
            //IPHostEntry ip = Dns.GetHostEntry(name);
            //Console.WriteLine(ip.AddressList[0].ToString());
            IPAddress[] adr=Dns.GetHostAddresses(name);
            foreach (IPAddress adress in adr)
            {
                Console.WriteLine(adress);
            }
            */
            Console.ReadLine();
        }
    }
}

and here's the code from the client program

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Net.Sockets;

namespace chat_client_console_client
{
    class Program
    {
        static void Main(string[] args)
        {
            string display;
            TcpClient client = new TcpClient("localhost", 2055);
            Stream s = client.GetStream();
            Console.WriteLine("Connection successfully received");

            StreamWriter sw = new StreamWriter(s);
            StreamReader sr = new StreamReader(s);
            sw.AutoFlush = true;
            while (true)
            {

                display = sr.ReadLine();
                Console.WriteLine("Reading stream");
                if (display == "")
                {
                    Console.WriteLine("breaking stream");
                    break;
                }

            }

            Console.WriteLine(display);
        }
    }
}

now i am successfully able to establish connection between the programs as indicated by various check messages. The server program is also successfully able to send the data into the stream.

However the client program is unable to read data from the stream. It seems to be stuck at readline() function.

Now i have been banging my head against the wall on this problem for hours now and would be greatly thankful if somebody is able to help me.

Upvotes: 0

Views: 818

Answers (1)

Jon Skeet
Jon Skeet

Reputation: 1503859

Look at your server:

sw.AutoFlush = true;
sw.Write("A test message");

You're never writing a line break, which is what the client is waiting to see.

Upvotes: 5

Related Questions