我在TCPListener / TCPClient的基础上与服务器的连接有一个非常奇怪的问题 . 在测试期间的某个时刻,我无法再连接到我的服务器应用程序,每次都尝试超时 . 双方的Netstats都表明,我的应用程序在正确的端口上进行侦听,而客户端正在尝试连接到正确的IP和端口,但它没有比“SYN_SENT”更进一步 . 服务器只是一直显示“LISTENING” . 我所能做的就是重启我的电脑,暂时解决了这个问题 . 但经过一些联系后,它又重新开始了 . 到目前为止,我测试了TCPClient和Sockets类以连接到服务器,但两者都显示了这种行为,这并不奇怪,因为TCPClient是套接字类afaik的包装器 .
双方都检查防火墙,远程桌面之类的工作完全正常,并且没有阻止我的应用程序的连接 . 没有任何关系可以关闭或者什么东西,已经把我所知道的一切都搞定了(可能没那么多;))
所以有什么问题?
编辑:
需要连接到我的服务器的方法:
public int GetSomeDataFromServer(string blargh)
{
int ret;
try
{
using(ConnectionTCPStream ctp = new ConnectionTCPStream())
{
if(ctp.EstSecConnWithServ())
{
ret = CKSHandler(ctp, blargh);
}
else
{ ret = (int)ErrFlags.ServerDeniedConnection; }
}
return ret;
}
catch(Exception)
{
InternalError = ErrFlags.ServerUnreachable;
return (int)ErrFlags.ServerUnreachable;
}
}
我的类的构造函数正在处理Connections:
public ConnectionTCPStream()
{
Client = new TcpClient("VeryImportantAdress", 49778); //it fails right here!
rsaCrypt = new RSACH() { RSAForeignPubKey = "An 8192-Bit long RSA Public key." };
AESPASS = AESThenHMAC.CreatePassword(200);
}
2 回答
听起来你正在耗尽所有的连接或其他资源 .
当你做netstat -an时,你看到了什么?你看到一堆开放的端口吗?
这里有一篇文章可能对你有所帮助here
其他一些资源可能会杀死你,当你遇到这种情况时,可能值得让SA启动资源监视器以检查主机的运行状况 .
如果没有抛出任何错误,它会让你的生活更加艰难 . 当您没有干净地清理套接字断开连接时,通常会发生此问题 .
答案是防火墙时不时改变主意 . 我之前无法测试,因为我无法访问它 . 现在我已经更改了设置,而我有这个封锁,它再次正常工作 . 所以答案是:始终可以访问防火墙,不要忘记检查它 .