7 out of 9 rated this helpful - Rate this topic

TcpListener Class

Listens for connections from TCP network clients.

System.Object
  System.Net.Sockets.TcpListener

Namespace:  System.Net.Sockets
Assembly:  System (in System.dll)
public class TcpListener

The TcpListener type exposes the following members.

  Name Description
Public method TcpListener(Int32) Obsolete. Initializes a new instance of the TcpListener class that listens on the specified port.
Public method TcpListener(IPEndPoint) Initializes a new instance of the TcpListener class with the specified local endpoint.
Public method TcpListener(IPAddress, Int32) Initializes a new instance of the TcpListener class that listens for incoming connection attempts on the specified local IP address and port number.
Top
  Name Description
Protected property Active Gets a value that indicates whether TcpListener is actively listening for client connections.
Public property ExclusiveAddressUse Gets or sets a Boolean value that specifies whether the TcpListener allows only one underlying socket to listen to a specific port.
Public property LocalEndpoint Gets the underlying EndPoint of the current TcpListener.
Public property Server Gets the underlying network Socket.
Top
  Name Description
Public method AcceptSocket Accepts a pending connection request.
Public method AcceptTcpClient Accepts a pending connection request
Public method AllowNatTraversal Enables or disables Network Address Translation (NAT) traversal on a TcpListener instance.
Public method BeginAcceptSocket Begins an asynchronous operation to accept an incoming connection attempt.
Public method BeginAcceptTcpClient Begins an asynchronous operation to accept an incoming connection attempt.
Public method EndAcceptSocket Asynchronously accepts an incoming connection attempt and creates a new Socket to handle remote host communication.
Public method EndAcceptTcpClient Asynchronously accepts an incoming connection attempt and creates a new TcpClient to handle remote host communication.
Public method Equals(Object) Determines whether the specified Object is equal to the current Object. (Inherited from Object.)
Protected method Finalize Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection. (Inherited from Object.)
Public method GetHashCode Serves as a hash function for a particular type. (Inherited from Object.)
Public method GetType Gets the Type of the current instance. (Inherited from Object.)
Protected method MemberwiseClone Creates a shallow copy of the current Object. (Inherited from Object.)
Public method Pending Determines if there are pending connection requests.
Public method Start() Starts listening for incoming connection requests.
Public method Start(Int32) Starts listening for incoming connection requests with a maximum number of pending connection.
Public method Stop Closes the listener.
Public method ToString Returns a string that represents the current object. (Inherited from Object.)
Top

The TcpListener class provides simple methods that listen for and accept incoming connection requests in blocking synchronous mode. You can use either a TcpClient or a Socket to connect with a TcpListener. Create a TcpListener using an IPEndPoint, a Local IP address and port number, or just a port number. Specify Any for the local IP address and 0 for the local port number if you want the underlying service provider to assign those values for you. If you choose to do this, you can use the LocalEndpoint property to identify the assigned information, after the socket has connected.

Use the Start method to begin listening for incoming connection requests. Start will queue incoming connections until you either call the Stop method or it has queued MaxConnections. Use either AcceptSocket or AcceptTcpClient to pull a connection from the incoming connection request queue. These two methods will block. If you want to avoid blocking, you can use the Pending method first to determine if connection requests are available in the queue.

Call the Stop method to close the TcpListener.

Note Note

The Stop method does not close any accepted connections. You are responsible for closing these separately.

The following code example creates a TcpListener.


using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text;

class MyTcpListener
{
  public static void Main()
  { 
    TcpListener server=null;   
    try
    {
      // Set the TcpListener on port 13000.
      Int32 port = 13000;
      IPAddress localAddr = IPAddress.Parse("127.0.0.1");

      // TcpListener server = new TcpListener(port);
      server = new TcpListener(localAddr, port);

      // Start listening for client requests.
      server.Start();

      // Buffer for reading data
      Byte[] bytes = new Byte[256];
      String data = null;

      // Enter the listening loop.
      while(true) 
      {
        Console.Write("Waiting for a connection... ");

        // Perform a blocking call to accept requests.
        // You could also user server.AcceptSocket() here.
        TcpClient client = server.AcceptTcpClient();            
        Console.WriteLine("Connected!");

        data = null;

        // Get a stream object for reading and writing
        NetworkStream stream = client.GetStream();

        int i;

        // Loop to receive all the data sent by the client.
        while((i = stream.Read(bytes, 0, bytes.Length))!=0) 
        {   
          // Translate data bytes to a ASCII string.
          data = System.Text.Encoding.ASCII.GetString(bytes, 0, i);
          Console.WriteLine("Received: {0}", data);

          // Process the data sent by the client.
          data = data.ToUpper();

          byte[] msg = System.Text.Encoding.ASCII.GetBytes(data);

          // Send back a response.
          stream.Write(msg, 0, msg.Length);
          Console.WriteLine("Sent: {0}", data);            
        }

        // Shutdown and end connection
        client.Close();
      }
    }
    catch(SocketException e)
    {
      Console.WriteLine("SocketException: {0}", e);
    }
    finally
    {
       // Stop listening for new clients.
       server.Stop();
    }


    Console.WriteLine("\nHit enter to continue...");
    Console.Read();
  }   
}


See TcpClient for a client example.

.NET Framework

Supported in: 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1
  • SocketPermission  

    to establish an outgoing connection or accept an incoming request.

Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.
Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.
Did you find this helpful?
(1500 characters remaining)
Community Content Add
Annotations FAQ
This while loop
This while loop locks up my UI. $0$0 $0 $0$0 $0 $0there as a rather simple (kinda annoying sometimes, you get errors if not done a SPECIFIC way) solution. you need to use a background worker. this adds multi-threading to your application. when your app 'locks up' its because using one thread means it must finish one task first before doing the next. to finish the while loop, it must receive something. using a background worker means the background worker 'locks up' and listens while the rest of the app remains operational$0 $0$0 $0 $0now, a background worker CANNOT communicate directly with other threads (i.e. your form and controls are on a seperate thread). instead, use the background worker.report progress. i can't remember exactly what i did, or the code i used (its been a long time since i last used a background worker)$0 $0$0 $0 $0i'll see if i can find the project i used this in, and i'll post the code. but for now, all i can say is to google cross-thread communication$0 $0$0 $0 $0hope it helps!$0
The listener should be on IPAddress.Any
So, there I was, trying to make a simple cross-machine connect...and failed, because the way the sample is written, the listener will ONLY listen for IPv4 traffic on the loopback address.  Any OTHER connection attempt will fail.  Instead, the localAddr should be created as "IPAddress localAddr = IPAddress.Any;" -- that will set it up to listen on any IPv4 address on the host.
.Net Protocol Builder
well, after struggling a lot to build my listener with TcpListener for my TCP protocol which contains more than 20 kinds of packets , I have used .Net Protocol Builder, I could get the code which I wanted in less than half an hour !! actually, .Net Protocol Builder generated all packets code and the client/server connections beside the server listener... I wonder why Microsoft doesn't include such a tool in VS.Net ? it's just the code every one dealing with TCP protocol wants to have ... also .Net Protocol Builder generated docx documentation for my TCP protocol ... I think Microsoft has to do something really similar .... it's really bad to keep working with raw bytes in the NetworkStream for example!!! see http://www.protocol-builder.com/ $0$0 $0