Read a Network Stream from a socket

10,710

I created a simple server application and tested your client code out. It all works fine for me. I would suggest you look at the server code to double check that it is sending data to the client. You could also use a packet sniffer tool such as WireShark to verify data is being transmitted as well.

Here is my server code:

IPEndPoint maxPort = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1234);
TcpListener listener = new TcpListener(maxPort);
listener.Start();
Socket socket = listener.AcceptSocket();
socket.Send(new byte[] { 1, 2, 3, 4, 5 });
socket.Close();

If your server is returning data, you may want to check the TCP headers. The problem might be from the PSH bit not being set. This would cause the TCP stack to not signal up that data is available yet. I am thinking this from the fact that you said Read call doesn't return and DataAvailable returns false continually.

Hope this helps.

Share:
10,710
JMK
Author by

JMK

Software developer currently living in Belfast, jack of a couple of trades, master of none!

Updated on August 16, 2022

Comments

  • JMK
    JMK over 1 year

    I am trying to read a Network Stream from a socket. I know that the Address Family of the socket is InterNetwork, the Socket Type is Stream and the Protocol Type is IP.

    I have an IPEndPoint which consists of the IP address and the port that I am trying to read from.

    NetworkStream myNetworkStream;
    Socket socket;
    IPEndPoint maxPort = new IPEndPoint(IPAddress.Parse("x.x.x.x"), xxxx);
    
    socket =
        new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
    socket.Connect(maxPort);
    
    myNetworkStream = new NetworkStream(socket);
    
    while (myNetworkStream.DataAvailable == false)
    {
        Thread.Sleep(1);
    }
    
    byte[] buffer = new byte[1024];
    int offset = 0;
    int count = 1024;
    
    myNetworkStream.Read(buffer, offset, count);
    
    Console.ReadLine();
    

    I know that data is available (I am writing my own version of an existing application and am using the source code as a reference) but the true/false Data Available property always remains false and I never hit my Console.Readline().

    What am I doing wrong here?

  • JMK
    JMK over 12 years
    Thanks, turns out I wasn't getting a response because I wasn't logging into the device! Doh!