Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C# socket StreamReader.ReadToEnd wait forever

In an Universal Windows Platform (UWP) app, I'm trying to send an object to a Windows form program using socket:

public void CreateListener()
    {
        TcpListener listener = new TcpListener(IPAddress.Any, port);
        listener.Start();

        while (true)
        {
            if (listener.Pending())
            {
                var childSocketThread = new Thread(() =>
                {
                    string data = null;
                    var Client = listener.AcceptTcpClient();
                    using (NetworkStream ns = Client.GetStream())
                    using (StreamReader sr = new StreamReader(ns))
                    {
                        data = sr.ReadToEnd();
                        var Items = JsonConvert.DeserializeObject<Models.Orders>(data);
                        Process(Items);
                        ns.Flush();
                        ns.Close();
                    }
                });
                childSocketThread.IsBackground = true;
                childSocketThread.Start();
            }
            else
            {
                Thread.Sleep(50); //<--- timeout
            }
        }
    }

But receiving object stuck in ReadToEnd and never exit. What should I do?

like image 903
n.y Avatar asked Jul 11 '26 11:07

n.y


1 Answers

Seems you have problem when you want to send data, after flushing your StreamWriter object you have to use StreamReader as a response.

            Stream streamIn = socket.InputStream.AsStreamForRead();
            StreamReader reader = new StreamReader(streamIn);
            string response = await reader.ReadLineAsync();

Hope this would help you.

like image 52
Hamed Avatar answered Jul 14 '26 01:07

Hamed