Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / ndp / fx / src / Net / System / Net / Sockets / TCPListener.cs / 1 / TCPListener.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Net.Sockets { using System; using System.Net; using System.Security.Permissions; ////// public class TcpListener { IPEndPoint m_ServerSocketEP; Socket m_ServerSocket; bool m_Active; bool m_ExclusiveAddressUse; ///The ///class provide TCP services at a higher level of abstraction than the /// class. is used to create a host process that /// listens for connections from TCP clients. /// public TcpListener(IPEndPoint localEP) { if(Logging.On)Logging.Enter(Logging.Sockets, this, "TcpListener", localEP); if (localEP == null) { throw new ArgumentNullException("localEP"); } m_ServerSocketEP = localEP; m_ServerSocket = new Socket(m_ServerSocketEP.AddressFamily, SocketType.Stream, ProtocolType.Tcp); if(Logging.On)Logging.Exit(Logging.Sockets, this, "TcpListener", null); } ////// Initializes a new instance of the TcpListener class with the specified local /// end point. /// ////// public TcpListener(IPAddress localaddr, int port) { if(Logging.On)Logging.Enter(Logging.Sockets, this, "TcpListener", localaddr); if (localaddr == null) { throw new ArgumentNullException("localaddr"); } if (!ValidationHelper.ValidateTcpPort(port)) { throw new ArgumentOutOfRangeException("port"); } m_ServerSocketEP = new IPEndPoint(localaddr, port); m_ServerSocket = new Socket(m_ServerSocketEP.AddressFamily, SocketType.Stream, ProtocolType.Tcp); if(Logging.On)Logging.Exit(Logging.Sockets, this, "TcpListener", null); } // implementation picks an address for client ////// Initializes a new instance of the TcpListener class that listens to the /// specified IP address and port. /// ////// /// [Obsolete("This method has been deprecated. Please use TcpListener(IPAddress localaddr, int port) instead. http://go.microsoft.com/fwlink/?linkid=14202")] public TcpListener(int port){ if (!ValidationHelper.ValidateTcpPort(port)) throw new ArgumentOutOfRangeException("port"); m_ServerSocketEP = new IPEndPoint(IPAddress.Any, port); m_ServerSocket = new Socket(m_ServerSocketEP.AddressFamily, SocketType.Stream, ProtocolType.Tcp); } ////// Initiailizes a new instance of the TcpListener class /// that listens on the specified /// port. /// ////// public Socket Server { get { return m_ServerSocket; } } ////// Used by the class to provide the underlying network socket. /// ////// protected bool Active { get { return m_Active; } } ////// Used /// by the class to indicate that the listener's socket has been bound to a port /// and started listening. /// ////// public EndPoint LocalEndpoint { get { return m_Active ? m_ServerSocket.LocalEndPoint : m_ServerSocketEP; } } public bool ExclusiveAddressUse { get { return m_ServerSocket.ExclusiveAddressUse; } set{ if (m_Active) { throw new InvalidOperationException(SR.GetString(SR.net_tcplistener_mustbestopped)); } m_ServerSocket.ExclusiveAddressUse = value; m_ExclusiveAddressUse = value; } } // Start/stop the listener ////// Gets the m_Active EndPoint for the local listener socket. /// ////// public void Start() { Start((int)SocketOptionName.MaxConnections); } public void Start(int backlog) { if (backlog > (int)SocketOptionName.MaxConnections || backlog < 0) { throw new ArgumentOutOfRangeException("backlog"); } if(Logging.On)Logging.Enter(Logging.Sockets, this, "Start", null); GlobalLog.Print("TCPListener::Start()"); if (m_ServerSocket == null) throw new InvalidOperationException(SR.GetString(SR.net_InvalidSocketHandle)); //already listening if (m_Active) { if(Logging.On)Logging.Exit(Logging.Sockets, this, "Start", null); return; } m_ServerSocket.Bind(m_ServerSocketEP); m_ServerSocket.Listen(backlog); m_Active = true; if(Logging.On)Logging.Exit(Logging.Sockets, this, "Start", null); } ////// Starts listening to network requests. /// ////// public void Stop() { if(Logging.On)Logging.Enter(Logging.Sockets, this, "Stop", null); GlobalLog.Print("TCPListener::Stop()"); if (m_ServerSocket != null) { m_ServerSocket.Close(); m_ServerSocket = null; } m_Active = false; m_ServerSocket = new Socket(m_ServerSocketEP.AddressFamily, SocketType.Stream, ProtocolType.Tcp); if (m_ExclusiveAddressUse) { m_ServerSocket.ExclusiveAddressUse = true; } if(Logging.On)Logging.Exit(Logging.Sockets, this, "Stop", null); } // Determine if there are pending connections ////// Closes the network connection. /// ////// public bool Pending() { if (!m_Active) throw new InvalidOperationException(SR.GetString(SR.net_stopped)); return m_ServerSocket.Poll(0, SelectMode.SelectRead); } // Accept the first pending connection ////// Determine if there are pending connection requests. /// ////// public Socket AcceptSocket() { if(Logging.On)Logging.Enter(Logging.Sockets, this, "AcceptSocket", null); if (!m_Active) throw new InvalidOperationException(SR.GetString(SR.net_stopped)); Socket socket = m_ServerSocket.Accept(); if(Logging.On)Logging.Exit(Logging.Sockets, this, "AcceptSocket", socket); return socket; } // UEUE ////// Accepts a pending connection request. /// ////// public TcpClient AcceptTcpClient() { if(Logging.On)Logging.Enter(Logging.Sockets, this, "AcceptTcpClient", null); if (!m_Active) throw new InvalidOperationException(SR.GetString(SR.net_stopped)); Socket acceptedSocket = m_ServerSocket.Accept(); TcpClient returnValue = new TcpClient(acceptedSocket); if(Logging.On)Logging.Exit(Logging.Sockets, this, "AcceptTcpClient", returnValue); return returnValue; } //methods [HostProtection(ExternalThreading=true)] public IAsyncResult BeginAcceptSocket(AsyncCallback callback, object state) { if(Logging.On)Logging.Enter(Logging.Sockets, this, "BeginAcceptSocket", null); if (!m_Active) throw new InvalidOperationException(SR.GetString(SR.net_stopped)); IAsyncResult result = m_ServerSocket.BeginAccept(callback,state); if(Logging.On)Logging.Exit(Logging.Sockets, this, "BeginAcceptSocket", null); return result; } public Socket EndAcceptSocket(IAsyncResult asyncResult){ if(Logging.On)Logging.Enter(Logging.Sockets, this, "EndAcceptSocket", null); if (asyncResult == null) { throw new ArgumentNullException("asyncResult"); } LazyAsyncResult lazyResult = asyncResult as LazyAsyncResult; Socket asyncSocket = lazyResult == null ? null : lazyResult.AsyncObject as Socket; if (asyncSocket == null) { throw new ArgumentException(SR.GetString(SR.net_io_invalidasyncresult), "asyncResult"); } // This will throw ObjectDisposedException if Stop() has been called. Socket socket = asyncSocket.EndAccept(asyncResult); if(Logging.On)Logging.Exit(Logging.Sockets, this, "EndAcceptSocket", socket); return socket; } [HostProtection(ExternalThreading=true)] public IAsyncResult BeginAcceptTcpClient(AsyncCallback callback, object state) { if(Logging.On)Logging.Enter(Logging.Sockets, this, "BeginAcceptTcpClient", null); if (!m_Active) throw new InvalidOperationException(SR.GetString(SR.net_stopped)); IAsyncResult result = m_ServerSocket.BeginAccept(callback,state); if(Logging.On)Logging.Exit(Logging.Sockets, this, "BeginAcceptTcpClient", null); return result; } public TcpClient EndAcceptTcpClient(IAsyncResult asyncResult){ if(Logging.On)Logging.Enter(Logging.Sockets, this, "EndAcceptTcpClient", null); if (asyncResult == null) { throw new ArgumentNullException("asyncResult"); } LazyAsyncResult lazyResult = asyncResult as LazyAsyncResult; Socket asyncSocket = lazyResult == null ? null : lazyResult.AsyncObject as Socket; if (asyncSocket == null) { throw new ArgumentException(SR.GetString(SR.net_io_invalidasyncresult), "asyncResult"); } // This will throw ObjectDisposedException if Stop() has been called. Socket socket = asyncSocket.EndAccept(asyncResult); if(Logging.On)Logging.Exit(Logging.Sockets, this, "EndAcceptTcpClient", socket); return new TcpClient(socket); } }; // class TcpListener } // namespace System.Net.Sockets // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ //[To be supplied.] ///// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Net.Sockets { using System; using System.Net; using System.Security.Permissions; ////// public class TcpListener { IPEndPoint m_ServerSocketEP; Socket m_ServerSocket; bool m_Active; bool m_ExclusiveAddressUse; ///The ///class provide TCP services at a higher level of abstraction than the /// class. is used to create a host process that /// listens for connections from TCP clients. /// public TcpListener(IPEndPoint localEP) { if(Logging.On)Logging.Enter(Logging.Sockets, this, "TcpListener", localEP); if (localEP == null) { throw new ArgumentNullException("localEP"); } m_ServerSocketEP = localEP; m_ServerSocket = new Socket(m_ServerSocketEP.AddressFamily, SocketType.Stream, ProtocolType.Tcp); if(Logging.On)Logging.Exit(Logging.Sockets, this, "TcpListener", null); } ////// Initializes a new instance of the TcpListener class with the specified local /// end point. /// ////// public TcpListener(IPAddress localaddr, int port) { if(Logging.On)Logging.Enter(Logging.Sockets, this, "TcpListener", localaddr); if (localaddr == null) { throw new ArgumentNullException("localaddr"); } if (!ValidationHelper.ValidateTcpPort(port)) { throw new ArgumentOutOfRangeException("port"); } m_ServerSocketEP = new IPEndPoint(localaddr, port); m_ServerSocket = new Socket(m_ServerSocketEP.AddressFamily, SocketType.Stream, ProtocolType.Tcp); if(Logging.On)Logging.Exit(Logging.Sockets, this, "TcpListener", null); } // implementation picks an address for client ////// Initializes a new instance of the TcpListener class that listens to the /// specified IP address and port. /// ////// /// [Obsolete("This method has been deprecated. Please use TcpListener(IPAddress localaddr, int port) instead. http://go.microsoft.com/fwlink/?linkid=14202")] public TcpListener(int port){ if (!ValidationHelper.ValidateTcpPort(port)) throw new ArgumentOutOfRangeException("port"); m_ServerSocketEP = new IPEndPoint(IPAddress.Any, port); m_ServerSocket = new Socket(m_ServerSocketEP.AddressFamily, SocketType.Stream, ProtocolType.Tcp); } ////// Initiailizes a new instance of the TcpListener class /// that listens on the specified /// port. /// ////// public Socket Server { get { return m_ServerSocket; } } ////// Used by the class to provide the underlying network socket. /// ////// protected bool Active { get { return m_Active; } } ////// Used /// by the class to indicate that the listener's socket has been bound to a port /// and started listening. /// ////// public EndPoint LocalEndpoint { get { return m_Active ? m_ServerSocket.LocalEndPoint : m_ServerSocketEP; } } public bool ExclusiveAddressUse { get { return m_ServerSocket.ExclusiveAddressUse; } set{ if (m_Active) { throw new InvalidOperationException(SR.GetString(SR.net_tcplistener_mustbestopped)); } m_ServerSocket.ExclusiveAddressUse = value; m_ExclusiveAddressUse = value; } } // Start/stop the listener ////// Gets the m_Active EndPoint for the local listener socket. /// ////// public void Start() { Start((int)SocketOptionName.MaxConnections); } public void Start(int backlog) { if (backlog > (int)SocketOptionName.MaxConnections || backlog < 0) { throw new ArgumentOutOfRangeException("backlog"); } if(Logging.On)Logging.Enter(Logging.Sockets, this, "Start", null); GlobalLog.Print("TCPListener::Start()"); if (m_ServerSocket == null) throw new InvalidOperationException(SR.GetString(SR.net_InvalidSocketHandle)); //already listening if (m_Active) { if(Logging.On)Logging.Exit(Logging.Sockets, this, "Start", null); return; } m_ServerSocket.Bind(m_ServerSocketEP); m_ServerSocket.Listen(backlog); m_Active = true; if(Logging.On)Logging.Exit(Logging.Sockets, this, "Start", null); } ////// Starts listening to network requests. /// ////// public void Stop() { if(Logging.On)Logging.Enter(Logging.Sockets, this, "Stop", null); GlobalLog.Print("TCPListener::Stop()"); if (m_ServerSocket != null) { m_ServerSocket.Close(); m_ServerSocket = null; } m_Active = false; m_ServerSocket = new Socket(m_ServerSocketEP.AddressFamily, SocketType.Stream, ProtocolType.Tcp); if (m_ExclusiveAddressUse) { m_ServerSocket.ExclusiveAddressUse = true; } if(Logging.On)Logging.Exit(Logging.Sockets, this, "Stop", null); } // Determine if there are pending connections ////// Closes the network connection. /// ////// public bool Pending() { if (!m_Active) throw new InvalidOperationException(SR.GetString(SR.net_stopped)); return m_ServerSocket.Poll(0, SelectMode.SelectRead); } // Accept the first pending connection ////// Determine if there are pending connection requests. /// ////// public Socket AcceptSocket() { if(Logging.On)Logging.Enter(Logging.Sockets, this, "AcceptSocket", null); if (!m_Active) throw new InvalidOperationException(SR.GetString(SR.net_stopped)); Socket socket = m_ServerSocket.Accept(); if(Logging.On)Logging.Exit(Logging.Sockets, this, "AcceptSocket", socket); return socket; } // UEUE ////// Accepts a pending connection request. /// ////// public TcpClient AcceptTcpClient() { if(Logging.On)Logging.Enter(Logging.Sockets, this, "AcceptTcpClient", null); if (!m_Active) throw new InvalidOperationException(SR.GetString(SR.net_stopped)); Socket acceptedSocket = m_ServerSocket.Accept(); TcpClient returnValue = new TcpClient(acceptedSocket); if(Logging.On)Logging.Exit(Logging.Sockets, this, "AcceptTcpClient", returnValue); return returnValue; } //methods [HostProtection(ExternalThreading=true)] public IAsyncResult BeginAcceptSocket(AsyncCallback callback, object state) { if(Logging.On)Logging.Enter(Logging.Sockets, this, "BeginAcceptSocket", null); if (!m_Active) throw new InvalidOperationException(SR.GetString(SR.net_stopped)); IAsyncResult result = m_ServerSocket.BeginAccept(callback,state); if(Logging.On)Logging.Exit(Logging.Sockets, this, "BeginAcceptSocket", null); return result; } public Socket EndAcceptSocket(IAsyncResult asyncResult){ if(Logging.On)Logging.Enter(Logging.Sockets, this, "EndAcceptSocket", null); if (asyncResult == null) { throw new ArgumentNullException("asyncResult"); } LazyAsyncResult lazyResult = asyncResult as LazyAsyncResult; Socket asyncSocket = lazyResult == null ? null : lazyResult.AsyncObject as Socket; if (asyncSocket == null) { throw new ArgumentException(SR.GetString(SR.net_io_invalidasyncresult), "asyncResult"); } // This will throw ObjectDisposedException if Stop() has been called. Socket socket = asyncSocket.EndAccept(asyncResult); if(Logging.On)Logging.Exit(Logging.Sockets, this, "EndAcceptSocket", socket); return socket; } [HostProtection(ExternalThreading=true)] public IAsyncResult BeginAcceptTcpClient(AsyncCallback callback, object state) { if(Logging.On)Logging.Enter(Logging.Sockets, this, "BeginAcceptTcpClient", null); if (!m_Active) throw new InvalidOperationException(SR.GetString(SR.net_stopped)); IAsyncResult result = m_ServerSocket.BeginAccept(callback,state); if(Logging.On)Logging.Exit(Logging.Sockets, this, "BeginAcceptTcpClient", null); return result; } public TcpClient EndAcceptTcpClient(IAsyncResult asyncResult){ if(Logging.On)Logging.Enter(Logging.Sockets, this, "EndAcceptTcpClient", null); if (asyncResult == null) { throw new ArgumentNullException("asyncResult"); } LazyAsyncResult lazyResult = asyncResult as LazyAsyncResult; Socket asyncSocket = lazyResult == null ? null : lazyResult.AsyncObject as Socket; if (asyncSocket == null) { throw new ArgumentException(SR.GetString(SR.net_io_invalidasyncresult), "asyncResult"); } // This will throw ObjectDisposedException if Stop() has been called. Socket socket = asyncSocket.EndAccept(asyncResult); if(Logging.On)Logging.Exit(Logging.Sockets, this, "EndAcceptTcpClient", socket); return new TcpClient(socket); } }; // class TcpListener } // namespace System.Net.Sockets // File provided for Reference Use Only by Microsoft Corporation (c) 2007.[To be supplied.] ///
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- CompositionCommandSet.cs
- OdbcParameterCollection.cs
- DbInsertCommandTree.cs
- XmlArrayItemAttribute.cs
- ScrollPattern.cs
- TableCellCollection.cs
- MethodBuilderInstantiation.cs
- TemplateColumn.cs
- Activator.cs
- SoapIgnoreAttribute.cs
- ParameterCollection.cs
- PropertyToken.cs
- ProxyElement.cs
- IndexOutOfRangeException.cs
- SchemaConstraints.cs
- GroupStyle.cs
- TemplateBamlTreeBuilder.cs
- ValidatorCompatibilityHelper.cs
- CodeDomSerializerBase.cs
- PropertyPathConverter.cs
- DataViewListener.cs
- HtmlInputText.cs
- LinkDescriptor.cs
- StyleHelper.cs
- TickBar.cs
- XpsException.cs
- SqlClientWrapperSmiStreamChars.cs
- XmlnsPrefixAttribute.cs
- ListViewTableRow.cs
- StringCollectionMarkupSerializer.cs
- TimeoutException.cs
- FileSecurity.cs
- Currency.cs
- SystemTcpConnection.cs
- EventSourceCreationData.cs
- ControlBuilder.cs
- ServicesUtilities.cs
- HttpRequestBase.cs
- XPathDocumentNavigator.cs
- SequenceDesignerAccessibleObject.cs
- CellLabel.cs
- DEREncoding.cs
- DynamicEndpointElement.cs
- WindowsSpinner.cs
- ObjectListGeneralPage.cs
- SocketSettings.cs
- EventLogTraceListener.cs
- ProcessThread.cs
- DrawingBrush.cs
- MetadataCache.cs
- ApplicationGesture.cs
- SafePEFileHandle.cs
- ExceptionValidationRule.cs
- DataSourceConverter.cs
- DataGridCommandEventArgs.cs
- LinqExpressionNormalizer.cs
- ListBox.cs
- ZipIOCentralDirectoryBlock.cs
- ServiceDiscoveryBehavior.cs
- ContentDisposition.cs
- ImageBrush.cs
- PriorityChain.cs
- PeerChannelFactory.cs
- FontUnit.cs
- CollectionViewSource.cs
- unsafenativemethodstextservices.cs
- MouseOverProperty.cs
- AuthorizationSection.cs
- CFStream.cs
- EventProperty.cs
- TrackBar.cs
- WorkflowWebService.cs
- PagePropertiesChangingEventArgs.cs
- XmlLoader.cs
- SimpleApplicationHost.cs
- FragmentNavigationEventArgs.cs
- BinaryFormatter.cs
- _NetworkingPerfCounters.cs
- ResourceExpression.cs
- XComponentModel.cs
- Pens.cs
- ProgressBarAutomationPeer.cs
- ButtonFlatAdapter.cs
- XmlSchemaExternal.cs
- ConfigurationConverterBase.cs
- TemplateContent.cs
- AppLevelCompilationSectionCache.cs
- SafeNativeMethods.cs
- ClrProviderManifest.cs
- DbConnectionHelper.cs
- ISFTagAndGuidCache.cs
- FileRecordSequence.cs
- Base64WriteStateInfo.cs
- BrushConverter.cs
- IdentityManager.cs
- DependencySource.cs
- InArgument.cs
- InvalidComObjectException.cs
- FillErrorEventArgs.cs
- Point4DValueSerializer.cs