C#TCP应用程序死锁在一台计算机上,永远不会在另一台计算机上死锁

时间:2014-04-07 05:10:41

标签: c# tcp

我不确定如何处理这个问题。我对显示我的代码犹豫不决,因为这是一项大学任务。我需要一些地方开始。

我正在与四名玩家和一台服务器进行TCP卡游戏。每100毫秒,一名玩家使用后台工作人员从服务器请求更新。服务器接受客户端连接并读入枚举值(作为Int32发送),告诉它希望服务器发送它的动作(更新,卡,播放器等)以及根据枚举值读入的值(接收更新枚举意味着它需要在下一个Int32中读取)。服务器根据读入的枚举发回响应。

这是问题发生的地方。我有一个定制的计算机(2500K处理器,Win8 x64),当我在其上执行程序时,它将永远循环,接受客户端请求并发回适当的响应。完全符合预期!但是,在我的笔记本电脑(Levono YogaPad,Win8 x64)上,来回交换持续约30-50个请求然后死锁。它总是在同一个地方。服务器已在Enumeration中读取并正在等待第二个值。客户端超过了发送枚举和值的部分,正在等待结果。它在我的桌面上始终稳定,并且在我的笔记本电脑上总是死锁。我甚至将程序放慢速度以便每秒更新一次,它仍然会死锁。我不知道该怎么做。

我在每台计算机上构建了程序。我已经在我的桌面上构建了程序并在我的笔记本电脑上运行它仍然死锁。有没有人有什么建议?

非常感谢!

1 个答案:

答案 0 :(得分:0)

您很幸运,在您发送作业之前,代码会挂在一台计算机上,并且它会挂在您的教师计算机上。你也很幸运,问题是可重现的,所以最好找出它挂在哪里。无法访问代码,我有以下猜测:

  • 您忘记在所有地方进行正确的错误处理,现在由于意外错误而导致循环繁忙
  • 它在读取中挂起,您尝试读取N个字节,但对等体仅发送K<N个字节

这些是疯狂的猜测,但是如果不能访问程序的基本结构,你就不可能期待更多。