簡體   English   中英

一台計算機上的C#TCP應用程序死鎖而另一台計算機上永不死鎖

[英]C# TCP Application deadlocks on one computer and never deadlocks on another

我不確定該如何處理。 我不願意顯示我的代碼,因為這是大學的任務。 我需要一些起點。

我正在制作一個有四個玩家和一個服務器的TCP卡游戲。 每隔100毫秒,播放器就會使用后台工作程序從服務器請求更新。 服務器接受客戶端連接,並讀取一個Enumeration值(以Int32形式發送),該值指示服務器希望服務器發送它的動作(更新,卡,播放器等),以及基於Enumeration值讀取的值(接收更新枚舉意味着接下來需要讀取Int32)。 服務器基於讀入的Enumeration發回響應。

這是發生問題的地方。 我有一台定制的計算機(2500K處理器,Win8 x64),當我在其上執行程序時,它將永遠循環,接受客戶端請求並將適當的響應發送回去。 完全符合預期! 但是,在我的筆記本電腦(Levono YogaPad,Win8 x64)上,來回交換持續約30-50個請求,然后出現死鎖。 它總是在同一地點。 服務器已讀入枚舉,正在等待第二個值。 客戶端已超出發送枚舉和值的部分,正在等待結果。 它在我的台式機上始終穩定,在筆記本電腦上始終死鎖。 我什至放慢了程序的速度以每秒更新一次,但它仍然死鎖。 我不確定該怎么辦。

我已經在每台計算機上構建了該程序。 我已經在台式機上構建了該程序,並在筆記本電腦上運行了該程序,但仍然陷入僵局。 有沒有人有什么建議?

非常感謝!

您很幸運,在您發送作業之前,該代碼已掛在一台計算機上,並且已掛在您的教師計算機上。 您也很幸運,該問題是可重現的,因此最好找出問題的根源。 在無法訪問代碼的情況下,我有以下瘋狂的猜測:

  • 您忘記了在所有地方進行正確的錯誤處理,現在由於意外錯誤而導致繁忙的循環
  • 它掛在您嘗試讀取N個字節的讀取內部,但對等方僅發送K<N個字節

這些都是大膽的猜測,但是即使沒有訪問程序的基本結構,也可能無法期望更多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM