gpt4 book ai didi

c# - 端口卡在 Time_Wait

转载 作者:可可西里 更新时间:2023-11-01 02:33:14 25 4
gpt4 key购买 nike

我在 C# 中有一个 TCP 隧道。我需要打开和关闭隧道,这是我在服务器和客户端之间的应用程序。我正在使用它来关闭数据连接以测试另一个应用程序。我必须使用特定的端口。

根据我等待重新连接的时间长短,在第二次、第三次、第 n 次连接上,我在绑定(bind)套接字时收到 10048 错误代码 - “地址已在使用中”。关闭套接字时,我会执行 ShutDown.Both 和 Close 以清除端口,但是当我在命令提示符下执行 netstat 时,我仍然发现端口处于 TIME_WAIT 中。我还将套接字设置为无延迟。最后我试着做一个循环来检查端口的状态,但它以某种无限循环结束。我认为这是 4 分钟 TIME_WAIT 规则。

我有一个显示 nestat 查询的函数,我发现当我运行它并检查直到端口从 ESTABLISHED 进入我可以绑定(bind)的 TIME_WAIT 时,但是当我使用来自该查询的相同数据绑定(bind)到当状态达到 TIME_WAIT 时循环,我得到一个 10048。我的按钮单击是否允许我绑定(bind)一个短暂的时间?在 TIME_WAIT 和 ESTABLISHED 之间是否存在我在循环中点击的状态,而不是在我点击按钮时点击的状态?我读到 TIME_WAIT 应该阻止我完全绑定(bind),但这似乎不是真的。谁能解释一下?

我向你们代码爱好者道歉。不认为这会改变任何事情。我只需要更好地了解港口国。

    public bool CheckAvailablePorts()
{
int temp=0;
bool availPort= true;
m_config = new AppConfig();
if (!m_config.initialize())
{
System.Diagnostics.Debug.WriteLine("Error loading configuration file. Exiting...");
return false;
}
else
{

//checking through all the ports that have been set to connect on

foreach (ProxyConfig cfg in m_config.m_proxyConfigs)
{
availPort = true;
temp = cfg.localEP.Port;
DataView dv = FindEstablishedSockets();//returns netstat query
foreach (DataRowView rowView in dv)
{
DataRow row = rowView.Row;

if ((Convert.ToInt32(row["Local Port"].ToString()) == temp) && (row["Status"].ToString().Equals("Established")))
{
System.Diagnostics.Debug.WriteLine("Port: " + temp + " is still locked");
availPort = false;
break;
}
}
}
return availPort;
}
}

//snippet out of a bigger function which checks for availability and then sleeps if false and runs again

bool temp = false;
while (!temp)
{
temp = monitor.CheckAvailablePorts();
System.Threading.Thread.Sleep(2000);
}
System.Threading.Thread.Sleep(3000);
monitor.startApplication(); //starts all the binding

最佳答案

您需要更具体一些,因为很难知道您在做什么。较短的文本和代码示例会有所帮助。

I need to open and close connections and then reopen them again

如果它在客户端中,那应该不是问题。如果是服务器端,请解释原因。

The config file on the server is looking for a particular port, so when I reconnect I need the same port open again

什么意思?如果您指的是监听端口:您永远不应该关闭监听器套接字。如果您不想接受多个套接字,只需在客户端套接字断开连接之前不要再次调用 Accept

关于c# - 端口卡在 Time_Wait,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5595331/

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