繁体   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