Difference between TCP Listener and Socket

后端 未结 4 1824
陌清茗
陌清茗 2020-12-25 10:31

As far as I know I can create a server using both TCPListener and Socket, so what is the difference between the two of them?

Socket

         


        
相关标签:
4条回答
  • 2020-12-25 11:01

    A TcpListener wraps a socket, and is the server-side analog to the TcpClient (which also, of course, wraps a socket).

    The TcpListener is preconfigured with TCP (as opposed to the Socket, which can be used with UDP, pure IP, non-IP protocols, etc.) and gives you a TcpClient when handling a connection.

    If you're not sure if you need a Socket, and are using TCP - I'd strongly suggest starting with TcpListener/Client as it's a much easier to use interface.

    0 讨论(0)
  • 2020-12-25 11:01

    I'm not really answering the question, but you seem to like TcpClient better because it has GetStream() which you can use with an SslStream, but you can get a NetworkStream out of a Socket by passing the Socket as a constructor to NetworkStream

    i.e. NetworkStream myStream = new NetworkStream(mySocket);

    0 讨论(0)
  • 2020-12-25 11:08

    They're just different classes that do the same thing, written at different levels. Under the hood the TCPListener undoubtedly calls something very like your first Socket-based code. It;s just there to hide you from some of the gory details.

    0 讨论(0)
  • 2020-12-25 11:20

    TcpListener is a convenient wrapper for TCP communications. This allows you to use TcpClient for accepted connections--although you can accept sockets instead of clients to use Socket instead of TcpClient. You can do the same thing with Socket; but you have to deal with some of the TCP-specifics (like SocketType.Stream, ProtocolType.Tcp). TCP is a stream-based protocol and TcpClient recognizes that by letting you do stream communications by providing a stream with TcpClient.GetStream(). Socket is at a higher different level and needs to support many different protocols like UDP that aren't stream based.

    TcpClient.GetStream returns a NetworkStream object that is suitable for SslStream; so, it should be much less work than using Socket directly. The documentation for SslStream details using TcpListener and TcpClient for SSL communications.

    0 讨论(0)
提交回复
热议问题