public async Task StartAsync() { if (active == true) { return; } else { active = true; } if (tcpListener != null) { tcpListener.Start(); return; } if (!string.IsNullOrEmpty(ListenAddress)) { try { // Set the porrt if specified in ProxyAddress. if (ListenAddress.Contains(":")) { String[] s = ListenAddress.Split(':'); ListenAddress = s[0]; ListenPort = int.Parse(s[1]); } // Resolve host binding from ProxyAddress IPHostEntry ipHost = await Dns.GetHostEntryAsync(ListenAddress); ListenIP = ipHost.AddressList[1]; } catch { } } try { tcpListener = new TcpListener(ListenIP, ListenPort); tcpListener.Start(); } catch (Exception e) { Console.WriteLine("\n \n*** Error *** Unable to open TCP listener. Socket returned error message:\n{0}", e.Message); //Environment.Exit(1); } await HandleConnectionsAsync(tcpListener); tcpListener.Stop(); }
public void Start() { if (OnClientRequestingConnection == null) { throw new ServerException("Client request handler not set"); } if (running) { Logger.WriteLine("TCPServer: start requested, but server is already running", Logger.Severity.Warning); return; } Logger.WriteLine("TCPServer: starting", Logger.Severity.Debug); tcpListener = new TcpListener(ListenAddress, ListenPort); try { tcpListener.Start(); } catch (SocketException exn) { string socketError = "socket error '" + exn.SocketErrorCode + "': " + exn.Message; Logger.WriteLine("TCPServer: failed to start server; " + socketError, Logger.Severity.Error); throw new ServerException(socketError); } var endPoint = (IPEndPoint)tcpListener.LocalEndpoint; actualPort = (ushort)endPoint.Port; startedEvent = new AutoResetEvent(false); listenerThread = new Thread(ListenerThread); listenerThread.Start(); startedEvent.WaitOne(500); if (!running) { Logger.WriteLine("TCPServer: failed to start server, timed out waiting for TcpListener to start", Logger.Severity.Error); listenerThread.Abort(); listenerThread.Join(); tcpListener = null; throw new ServerException("Failed to start server, timed out waiting for TcpListener to start"); } EventHandlerExtensions.Invoke(OnStarted, this); Logger.WriteLine("TCPServer: started successfully", Logger.Severity.Debug); if (ListenAddress.ToString() == "0.0.0.0") { Logger.WriteLine("TCPServer: listening on all local network interfaces", Logger.Severity.Debug); } else { Logger.WriteLine("TCPServer: listening on local address " + Address, Logger.Severity.Debug); } Logger.WriteLine("TCPServer: listening on port " + actualPort, Logger.Severity.Debug); }
/// <summary> /// 根据配置的监听地址获取实际的地址 /// </summary> /// <returns></returns> public string GetHostAddress() { if (!string.IsNullOrWhiteSpace(ListenAddress)) { var separator = ListenAddress.IndexOf("/"); if (separator > 0) { var baseAddress = ListenAddress.Substring(0, separator); if (int.TryParse(ListenAddress.Substring(separator + 1), out int maskBits)) { return(GetHostAddress(baseAddress, maskBits)); } return(baseAddress); } } return(ListenAddress); }