尝试同时侦听多个端口时出现SocketException C#

尝试同时侦听多个端口时出现SocketException C#,c#,sockets,http,ssl,networking,C#,Sockets,Http,Ssl,Networking,我正在编写一个HTTP服务器,我想同时监听两个端口 我创建了两个套接字和两个端点,并将它们传递给线程 当代码位于socket.Bind(端点)时,我得到以下异常: 守则: public class HTTPServer { private readonly IPEndPoint m_LocalEndPoint=new IPEndPoint(IPAddress.Any, 8082);; private readonly IPEndPoint m_SecuredLocalEndPoi

我正在编写一个HTTP服务器,我想同时监听两个端口
我创建了两个套接字和两个端点,并将它们传递给线程
当代码位于
socket.Bind(端点)时,我得到以下异常

守则:

public class HTTPServer
{
    private readonly IPEndPoint m_LocalEndPoint=new IPEndPoint(IPAddress.Any, 8082);;
    private readonly IPEndPoint m_SecuredLocalEndPoint=new IPEndPoint(IPAddress.Any, 8083);
    private readonly Socket m_SocketListener=new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);;
    private readonly Socket m_SecureSocketListener=new Socket(AddressFamily.InterNetwork, SocketType.Stream,ProtocolType.Tcp);; 

    public void Start()
        {

            Thread t = ThreadFactory.Create(() => AsyncStart(m_LocalEndPoint,m_SocketListener));
            t.Name = string.Format("HTTPServer({0})", this);
            t.Start();
            Thread sucureThread = ThreadFactory.Create(() => AsyncStart(m_SecuredLocalEndPoint,m_SecureSocketListener));
            sucureThread.Name = string.Format("HTTPSServer({0})", m_SecuredLocalEndPoint);
            sucureThread.Start();
        }


    private void AsyncStart(IPEndPoint endPoint, Socket socket)
        {
            try
            {
                socket.Bind(endPoint);
                socket.Listen(MAX_NUMBER_OF_PENDING_CONNECTIONS);
                Socket clientSocket = socket.Accept();
            }
            catch (Exception ex)
            {
            }          
        }
}
我不知道它是否与这个问题有关,但我想监听两个端口的原因是我想能够在同一台服务器上处理HTTP和HTTPS请求
因此,如果客户端向端口8082发送数据包,我将按如下方式处理它
一个HTTP请求,如果他发送到8083,我将作为HTTPS请求处理
我遗漏了什么,或者如何解决此问题(避免
SocketException
)并仍然侦听这两个端口?

如果套接字在某个特定端口上持续出现故障,则可能有另一个进程侦听该端口


在本地系统上运行端口扫描,以确认端口是否可用。

是否有其他设备正在侦听您尝试使用的某个端口?我以前在VisualStudio中运行套接字侦听器时遇到过这个问题。我的程序已经结束,但线程在后台仍处于活动状态,占用了端口。@Alex在'AsyncStart'方法的末尾,我有一个'finally'作用域,我正在关闭两个套接字。将finally作用域添加到代码示例中是值得的。是第一次运行时失败,还是在两个套接字都打开的情况下正确运行一次,然后在后续时间失败?您是否尝试过在系统上进行端口扫描,以查看是否有其他内容正在使用端口?好的,您是否尝试过端口扫描,以查看是否有其他内容正在使用端口?@Alex您是对的!另一个进程正在侦听同一端口。请写一个问题的答案,以便我能接受:)
public class HTTPServer
{
    private readonly IPEndPoint m_LocalEndPoint=new IPEndPoint(IPAddress.Any, 8082);;
    private readonly IPEndPoint m_SecuredLocalEndPoint=new IPEndPoint(IPAddress.Any, 8083);
    private readonly Socket m_SocketListener=new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);;
    private readonly Socket m_SecureSocketListener=new Socket(AddressFamily.InterNetwork, SocketType.Stream,ProtocolType.Tcp);; 

    public void Start()
        {

            Thread t = ThreadFactory.Create(() => AsyncStart(m_LocalEndPoint,m_SocketListener));
            t.Name = string.Format("HTTPServer({0})", this);
            t.Start();
            Thread sucureThread = ThreadFactory.Create(() => AsyncStart(m_SecuredLocalEndPoint,m_SecureSocketListener));
            sucureThread.Name = string.Format("HTTPSServer({0})", m_SecuredLocalEndPoint);
            sucureThread.Start();
        }


    private void AsyncStart(IPEndPoint endPoint, Socket socket)
        {
            try
            {
                socket.Bind(endPoint);
                socket.Listen(MAX_NUMBER_OF_PENDING_CONNECTIONS);
                Socket clientSocket = socket.Accept();
            }
            catch (Exception ex)
            {
            }          
        }
}