我做了一個簡單的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」從來沒有被打印到屏幕上。如果我從手機重新加載連接,它會經過並重新啓動,但會再次粘在同一個地方。如果我偷偷從另一臺設備連接到另一臺設備,則有可能恢復正常。任何想法,爲什麼這是或如何解決它?
你是否在末尾的新行字符(S)發送一個字符串? – Stilgar
該行正在等待傳入的字符串與結尾處的「\ n」。 – 2016-08-03 14:51:37
'ReadLine()'是阻塞方法。它將阻塞,直到行將到達(文本消息最後用'\ xD \ xA「')。您可以嘗試設置超時,異步讀取或讀取字節/字符串..但不是行。最簡單的方法可能是在閱讀之前進行檢查。 – Sinatr