2014-04-07 14 views
0

我不知道如何處理此問題。我對顯示我的代碼猶豫不決,因爲這是一項大學任務。我需要一些地方開始。C#TCP在一臺計算機上的應用程序死鎖,並且從未在另一臺計算機上出現死鎖

我正在製作一個有四個玩家和一個服務器的TCP卡遊戲。每100ms,玩家使用後臺工作人員從服務器請求更新。服務器接受一個客戶端連接並讀入一個Enumeration值(作爲Int32發送),告訴它它想要服務器發送它的動作(更新,卡片,播放器等)以及一個基於Enumeration值讀入的值(接收更新枚舉意味着它需要讀入一個Int32接下來)。服務器根據讀取的枚舉返回一個響應。

這是問題出現的地方。我有一個定製的計算機(2500K處理器,Win8 x64),當我在其上執行程序時,它將永遠循環,接受客戶端請求併發回相應的響應。完全如預期!但是,在我的筆記本電腦(Levono YogaPad,Win8 x64)上,來回交換持續大約30-50個請求,然後出現死鎖。它總是在同一個地方。服務器已讀入Enumeration並正在等待第二個值。客戶端已經過去發送枚舉和值的部分,正在等待結果。它始終穩定在我的桌面上,並始終在我的筆記本電腦上出現死鎖。我甚至放慢了程序的速度,每秒鐘更新一次,但它仍然是死鎖。我不知道該怎麼做。

我已經在每臺計算機上構建了該程序。我在桌面上創建了該程序,然後在筆記本電腦上運行該程序,但仍然出現死鎖。有沒有人有什麼建議?

非常感謝!

回答

0

很幸運,您在發送作業之前將代碼掛在一臺機器上,並掛在教師機器上。你也很幸運,問題是可重複的,所以更好地找出它究竟在哪裏掛起。無需訪問代碼,我有以下亂撞:

  • 你忘了做適當的錯誤處理在所有的地方,因爲一個意外的錯誤
  • 它掛在您嘗試讀取裏面的現在忙循環讀N個字節,但對方只發送K<N字節

這些都是胡亂猜測,但不必甚至你的程序,你不能指望大概什麼更多的基本結構的訪問。

相關問題