我有一个用 C# 编写的作为 Windows 服务运行的代理服务器。它监听 127.0.0.1:xxxxx,其中 xxxxx 可以是从 53500 开始的一系列端口。
代理工作得很好,但有时某些端口停止响应,当我尝试远程登录到它们时,它说请求超时或没有响应。
我无法在我的开发区域中重现此问题,但我认为它与某些导致在 EndReceive 之后不调用 BeginReceive 的问题有关。以下引述来自关于我正在经历的症状的话题。
Similar problem is when using asynchronous communication and there is an execution path which turns out to not call BeginReceive once previous EndReceive was completed. This makes socket ignorant to all further data sent by the remote side.
有没有办法模拟这种端口停止响应的情况。我想写一些代码来检查端口是否在处理请求之前响应。如果它没有响应,我可以删除该端口上的监听器并重新添加它。这是一个创可贴,可以防止代理崩溃,直到我确定问题的原因。
我还添加了一些额外的日志记录以确定导致端口停止响应的原因。
最佳答案
我在摸黑,但代码是否包含在 try finally block 中?
如果 finally block 是您调用 EndReceive 的唯一地方,它可能会消除您的问题。
try{
// processing code
}finally{
EndReceive()
BeginReceive()
}
关于C#模拟TCP端口无响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4948422/