2014-04-26 91 views
-7

無論如何,我試圖使客戶端連接到服務器使用TCPListener和TCPClient 每當我有while (true)代碼,它凍結了我的整個應用程序。while(true)loop lagg

我的代碼:

private void addSocket(int port) 
{ 
    server = new TcpListener(IPAddress.Any, port); 
    server.Start(); 
    client = server.AcceptTcpClient(); 
    sr = new StreamReader(client.GetStream()); 
    sw = new StreamWriter(client.GetStream()); 
    toolStripStatusLabel2.Text = "waiting for connection"; 
    while (true) 
    { 
     toolStripStatusLabel2.Text = "client connected"; 
    } 
    server.Stop(); 
    client.Close(); 
} 
+0

可悲的是,你應該啓動一個BackgroundWorker或線程 –

+6

「醫生,這當我這樣做的時候傷害了我。「 「那麼不要那樣做。」 –

+0

你認爲一個*無限*循環會做什麼?結束一段時間? –

回答

0

while(true)是一個無限循環,離開它的唯一方法是使用break。或者將while(true)更改爲一些可選擇的結束條件。

在這段代碼中,while(true)部分是沒有真正意義上的我,很可能需要添加別的東西的那部分爲好,例如一些連接東西等

+0

好,我想這是當一個新的客戶端已連接它顯示一個消息一樣,爲此我使用的,而(真) – user3575640

+0

如果刪除,而(真),只保留信息的分配,它會更明顯發生了什麼代碼的確如此。它將分配消息一次;您分配消息的次數沒有差異,它將是相同的。 –

+0

如果我刪除while循環,當沒有客戶端連接它顯示這個文本「客戶端連接」; – user3575640

0

這是因爲while (true)永遠不會結束。添加一個條件,在某些時候將返回false

在這種情況下,while沒有道理給我。你的意圖是什麼?只需開始TaskBackgroundWorker來處理流。

0

你不需要它是所有的時間,你呢?

private void addSocket(int port) 
{ 
server = new TcpListener(IPAddress.Any, port); 
server.Start(); 
client = server.AcceptTcpClient(); 
sr = new StreamReader(client.GetStream()); 
sw = new StreamWriter(client.GetStream()); 
toolStripStatusLabel2.Text = "waiting for connection"; 


    toolStripStatusLabel2.Text = "client connected"; 

server.Stop(); 
client.Close(); 
toolStripStatusLabel2.Text = "client not connected"; 
} 

您只需更改文本即可。然後你可以稍後改變它!

,如果你想使用,而(真)下一次{};考慮使用線程

+0

好,如果我這樣做是顯示了當客戶端連接的文本有沒有客戶端連接? – user3575640

+0

@ user3575640然後添加toolStripStatusLabel2.Text =「客戶端未連接」;連接關閉後。看看我的編輯你有什麼想法? –

0

也許你的程序將運行正常,如果你只是刪除while語句,因爲我沒有看到你的代碼中的任何需要它