C# 模拟 TCP 端口未响应

3
我有一个用C#编写的代理服务器,作为Windows服务运行。它监听127.0.0.1:xxxxx,其中xxxxx可以是从53500开始的一系列端口。
代理工作得非常好,但有时某些端口会停止响应,当我尝试telnet到它们时,它会显示请求超时或未响应。
我无法在开发区域中复现此问题,但我认为这与某些原因导致BeginReceive在EndReceive之后未被调用有关。以下引用摘自我正在经历的症状的线程。
"使用异步通信时类似的问题是,当存在执行路径时,该路径不会在完成先前的EndReceive后调用BeginReceive。这使套接字对远程端发送的所有进一步数据都毫不知情。"
是否有一种方法模拟端口停止响应的情况?我想编写一些代码,在继续请求之前检查端口是否响应。如果没有响应,我可以删除该端口上的侦听器并重新添加。这是一种临时措施,以防止代理崩溃,直到我确定问题的原因。
我还添加了一些额外的日志记录,以确定是什么导致端口停止响应。

1
你能添加代码吗?在你怀疑问题的地方。 - Jeff LaFay
那是有可能的。我原本打算在独立的服务中进行端口测试,但我会再看一眼。 - modernzombie
可能你可以尝试一下在这个问题的回答中推荐的工具之一。 - Blorgbeard
你应该尝试“刺激”故障而不是“模拟”故障。问题可能与你预期的不同。请参阅:http://books.google.com/books?id=jynA9ECbBsgC&pg=PA30#v=onepage&q&f=false - Zach Johnson
1个回答

0
我猜测一下,你的代码是否被包裹在try finally块中?
如果finally块是唯一调用EndReceive的地方,那么它可能会消除你的问题。
try{
    // processing code
}finally{
    EndReceive()
    BeginReceive()

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接