c# - 重新连接 socket

标签 c# asp.net sockets

所以我有一个套接字服务器在 asp.net ( C# ) 应用程序中运行(非常糟糕的方法),它通知任何连接的设备, 就像我刚开始在这家公司工作的时候,改变它并不是我的主管优先考虑的事情,尽管它会更好。

因此,当我们对网站进行更新时,套接字连接保持打开状态(在另一个线程中),然后我们必须重新启动服务器,但我想做的是在启动时以某种方式获取线程 ID Socket,然后存储它,如果更新完成,它应该重新附加到该线程并以某种方式结束 Socket 或重置它。

这可能吗?

这是示例代码

    private void Start()
    {
        _socketServer = new TcpListener(IPAddress.Any, Convert.ToInt32(ConfigurationManager.AppSettings["NotificationSocketPort"]));
        _socketServer.Start();
        _acceptingThread = new Thread(() =>
        {
            while (true)
            {
                try
                {
                    var client = _socketServer.AcceptTcpClient();
                    StartClient(client);
                }
                catch (ObjectDisposedException ex)
                {
                    _acceptingThread = null;
                    _socketServer = null;
                    Start();
                    break;
                }
            }
        });
        _acceptingThread.Start();
    }

    public void Close()
    {
        if (_acceptingThread != null)
        {

            _acceptingThread.Abort(0x0);
            _socketServer.Stop();
            _acceptingThread = null;
            _socketServer = null;
        }
    }

在global.asax中

protected void Application_End(object sender, EventArgs e)
{
    SocketNotifier.GetNotifierInstance().Close();
}

SocketNotifier 使用单例设计模式

最佳答案

坦白说,这是错误的做法。 Web 应用程序会重新启动,并且应该会重新启动。套接字不喜欢这样,也不应该期望这样。这里最好的选择是将套接字代码重写为 Windows 服务 - 这样它就可以独立于网络应用程序继续运行。

关于c# - 重新连接 socket ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25325451/

相关文章:

c# - 多线程与数据库

c# - 检查并比较 sql server 表中的列值

javascript - 无法在加载时加载 Gridview

c# - 如何将 std::string& SWIG 转换为 C# 引用字符串

javascript - 如何设置 OnClientClick 值 - 语法?

c# - 为什么 "this"可以,但 "this"(在另一种方法中)不行?

javascript - Microsoft JScript 运行时错误 : 'this._postBackSettings.async' is null or not an object

linux - 是否有原始套接字的安全接口(interface)?

Python - 获取本地主机 IP

c# 使用套接字进行单元测试