gpt4 book ai didi

c# - 某种类型的断开连接后无法重新连接套接字,重新启动有效

转载 作者:太空宇宙 更新时间:2023-11-03 14:14:11 25 4
gpt4 key购买 nike

我正在通过套接字连接到 C# 中的远程服务器并发送数据,断开连接后我尝试通过创建新套接字并重新初始化它来重新建立连接。

当我通过拔出以太网电缆并在几分钟后重新连接进行测试时,这对我有用,但偶尔(可能每隔几个小时)我在连接时遇到两个异常之一,无法重新连接...

System.Net.Sockets.SocketException: An established connection was aborted by the software in your host machine

.......

System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host

如果我重新启动应用程序,一切都会再次正常工作,所以我很好奇为什么创建新套接字不起作用。我可能在某处缺少初始化吗?有任何想法吗?我每次都使用相同的连接方法:

public static bool OpenConnection(string siteName)
{
bool success;
IPEndPoint ip = new IPEndPoint(IPAddress.Parse(serverIp), Convert.ToInt16(serverRemotePort));

try
{
client = null;
client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
Console.WriteLine("Try to connect to the server ..." + ip.Address.ToString());
client.Connect(ip);
Console.WriteLine("Connection established");

//Send the nameSite first
string nameSite = EncryptString(siteName, pwd, initVector) + "*";
byte[] dataSite = new byte[100];
dataSite = Encoding.ASCII.GetBytes(nameSite);
client.Send(dataSite, dataSite.Length, SocketFlags.None);
Console.WriteLine("NameSite send");
success = true;
}
catch (SocketException e)
{
success = false;
Console.WriteLine("Unable to connect to the server : " + e.StackTrace);
}

return success;
}

我尝试在 catch 中按如下方式重新连接,计数随着 while 循环的每次迭代而递增。

if (count % 20 == 0)
{
try
{
if (OpenConnection(siteName))
connected = true;
EventLog.WriteEntry("Connection re-established.");
}
catch (SocketException socketEx)
{
Console.WriteLine("Reconnection failed. Storing data locally. \n\n " + socketEx);
EventLog.WriteEntry("Reconnection failed. Storing data locally. \n\n " + socketEx);
}
}

构造函数只是初始化 IP 和端口号。为什么某些类型的断开连接会阻止我在不重新启动的情况下重新连接,有什么想法吗?

最佳答案

你有没有在客户端调用 Dispose() 来清理它?

在 OpenConnection 方法中取消客户端之前,尝试添加对 Dispose() 的调用

client.Dispose();
client = null;

查看 Socket 的文档后在 MSDN 上,Disconnect方法似乎也可以解决您的问题。但是,我不确定它应该放在代码中的什么位置,因为问题显示了部分逻辑。

关于c# - 某种类型的断开连接后无法重新连接套接字,重新启动有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6974359/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com