2016-08-03 125 views
-1

我做了一個簡單的tcp listener服務器,我通過手機連接到我的天花板燈。但每一個現在,然後將其卡在streamreader.readline從接法客戶端C#TcpListener streamreader.readline卡住了

TcpListener listener = new TcpListener (IPAddress.Any, 8001); 
     listener.Start(); 


     //--------------------------MAIN LOOP-------------------------- 
     while (true) 
     { 

      //Recieve connection and take care of response 
      Console.WriteLine ("Awaiting connection"); 

      TcpClient client = listener.AcceptTcpClient(); 
      Console.WriteLine ("Client accepted"); 

      StreamReader sr = new StreamReader (client.GetStream()); 
      Console.WriteLine ("1:3"); 

      StreamWriter sw = new StreamWriter (client.GetStream()); 
      Console.WriteLine ("1:4"); 

      string fullrequests = "/no/request/value"; 
      Console.WriteLine ("1:5"); 


      fullrequests = sr.ReadLine(); <---- IT'S STUCK HERE 
      Console.WriteLine ("1:6"); 

它粘合,使得「1:6」從來沒有被打印到屏幕上。如果我從手機重新加載連接,它會經過並重新啓動,但會再次粘在同一個地方。如果我偷偷從另一臺設備連接到另一臺設備,則有可能恢復正常。任何想法,爲什麼這是或如何解決它?

+0

你是否在末尾的新行字符(S)發送一個字符串? – Stilgar

+0

該行正在等待傳入的字符串與結尾處的「\ n」。 – 2016-08-03 14:51:37

+0

'ReadLine()'是阻塞方法。它將阻塞,直到行將到達(文本消息最後用'\ xD \ xA「')。您可以嘗試設置超時,異步讀取或讀取字節/字符串..但不是行。最簡單的方法可能是在閱讀之前進行檢查。 – Sinatr

回答

-2

在你的循環中,你可以檢查client.Available - 如果有傳入的數據,它會大於0,然後你可以讀取。

我在不久之前建立了一個庫和NuGet包來簡化它;我花了更多時間讓套接字高興,而不是在應用上取得進展。它可以幫助你查看代碼以供參考;雖然它不是性能的閃亮示例,但它在處理應用程序中的幾個套接字連接方面效果非常好。

https://github.com/BrandonPotter/SimpleTCP/blob/master/SimpleTCP/Server/ServerListener.cs

  List<byte> bytesReceived = new List<byte>(); 

      while (c.Available > 0 && c.Connected) 
      { 
       byte[] nextByte = new byte[1]; 
       c.Client.Receive(nextByte, 0, 1, SocketFlags.None); 
       bytesReceived.AddRange(nextByte); 

       if (nextByte[0] == _delimiter) 
       { 
        byte[] msg = _queuedMsg.ToArray(); 
        _queuedMsg.Clear(); 
        _parent.NotifyDelimiterMessageRx(this, c, msg); 
       } else 
       { 
        _queuedMsg.AddRange(nextByte); 
       } 
      } 

NuGet Package

+0

這看起來很棒,我會研究它。 由於某種原因,我不能upvote這個答案。 –