2011-12-15 32 views
0

我想在c#中創建控制檯應用程序,該應用程序將連接到本地推送服務器並將接收來自它的消息。如何使用將同時接收相同數據的線程?

我創建了能夠讀取從推送服務器響應通過使用下面的代碼所做的「單」連接的應用程序:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://192.168.15.174/MvisumPushServer/PushServer.ashx?op=2&DeviceUniqueID=50211&ConnectionTimeout=30&ConnectionMechanism=Wifi&OSVersion=10&DeviceMake=Android&DeviceModel=sdk"); 

    HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
    Stream stream = null; 
    stream = response.GetResponseStream(); 
    StreamReader reader = new StreamReader(stream); 
    s = reader.ReadLine(); 
    Console.WriteLine(s); 

現在我想要做同樣的事情,從單一的5間或更多的連接程序使用線程。 這些連接應該單獨收到所有消息,並應顯示給控制檯。例如,如果從控制檯上的推送服務器生成5個通知,則應該編寫25條警報,即每個連接從推送服務器接收每條消息。我已經使用Lock(this)嘗試過,但總共有5條警報顯示在控制檯上。

回答

0

如果重要,您的方法是關於定期開啓的設備。這意味着如果要測試服務器,則必須使用計時器執行輪詢。
只要您使用線程安全隊列將響應排入隊列,並將它們單獨出隊並將它們寫入控制檯,那麼使用以特定或隨機間隔已具有的代碼調用例程的數組將完成此任務。此外,如果將DeviceUniqueID連接到每個定時器(具有相同長度的另一個數組),則此例程可以接受不同的DeviceUniqueID(作爲參數)。

0

我懷疑問題實際上是鎖。我懷疑某個線程正在獲取鎖,然後阻塞ReadLine,從而阻止其他線程進展。假設WriteLine是線程安全的,你應該可以在五個線程中執行你的代碼,而不會出現任何問題。

0

這聽起來不像你的線程方法是負責的問題。這聽起來像你的服務器每個連接發送一個事件(5個連接),而不是每個連接5個事件。

相關問題