c# - 尝试同时监听多个端口时出现 SocketException C#

标签 c# sockets http ssl networking

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

System.Net.Sockets.SocketException: Only one usage of each socket address (protocol/network address/port) is normally permitted

代码:

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)并仍然监听两个端口?

最佳答案

如果套接字在特定端口上持续失败,则可能有另一个进程正在监听该端口。

在本地系统上运行端口扫描以确认端口是否空闲。

关于c# - 尝试同时监听多个端口时出现 SocketException C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34132918/

相关文章:

c - libcurl:连接保持事件如何工作?

php - angularjs 4 : how to post raw JSON data

c# - 输入键触发登录按钮

c# - 在 Dapper 中使用 Protocol Buffer 模型时如何将 C# ticks 映射到 PostgreSQL 时间戳?

javascript - AJAX 404 错误 - 调用 Controller 操作 .Net MVC

c# - 为什么 WCF 在遇到 302 响应时无法调用 SOAP 服务?

javascript - Ajax /套接字: javascript array object properties get lost

objective-c - Xcode 4 中未声明的结构地址信息

python - 在 Python 中,从另一个线程通过套接字发送数据不起作用

javascript - 下载带有授权 header 的 anchor 链接