C#模拟TCP端口没有响应

时间:2011-02-09 17:39:20

标签: c# sockets tcp

我有一个用C#编写的代理服务器作为Windows服务运行。它侦听127.0.0.1:xxxxx,其中xxxxx可以是53500以上的端口范围。

代理工作得很好但有时某些端口停止响应,当我尝试telnet到它们时它表示请求超时或者没有响应。

我无法在我的开发区域重现此问题,但我认为这与在EndReceive之后不会调用BeginReceive的事情有关。以下引用来自一个关于我遇到的症状的帖子。

  

类似的问题是在使用异步通信时,有一个执行路径,一旦完成前一个EndReceive,就会调用BeginReceive。这使得套接字对远程端发送的所有其他数据一无所知。

有没有办法模拟端口停止响应的情况。我想写一些代码来检查端口是否在响应请求之前响应。如果它没有响应,我可以删除该端口上的侦听器并再次添加它。这是一个创可贴,可以防止代理崩溃,直到我能确定问题的原因。

我还添加了一些额外的日志记录来确定导致端口停止响应的原因。

1 个答案:

答案 0 :(得分:0)

我正在暗中捅,但是代码包裹在try finally块中?

如果finally块是唯一一个你调用EndReceive的地方,它可能会消除你的问题。

try{
    // processing code
}finally{
    EndReceive()
    BeginReceive()

}