帮我选择Socket或TCPListener

时间:2010-02-23 02:51:07

标签: c# networking

我读了2个C#聊天源代码&我看到一个问题: 一个源使用Socket类:

private void StartToListen(object sender , DoWorkEventArgs e)
{
    this.listenerSocket = new Socket(AddressFamily.InterNetwork , SocketType.Stream , ProtocolType.Tcp);
    this.listenerSocket.Bind(new IPEndPoint(this.serverIP , this.serverPort));
    this.listenerSocket.Listen(200);
    while ( true )
        this.CreateNewClientManager(this.listenerSocket.Accept());
}

另一个使用TcpListener类:

    server = new TcpListener(portNumber);
    logger.Info("Server starts");
    while (true)
    {
        server.Start();
        if (server.Pending())
        {
            TcpClient connection = server.AcceptTcpClient();
            logger.Info("Connection made");
            BackForth BF = new BackForth(connection);
        }
    }

请帮我选一个。我应该使用Socket类或TcpListener类。套接字连接是TCP还是UDP?感谢。

1 个答案:

答案 0 :(得分:4)

UDP是无连接的,但可以在套接字对象的两端强制执行伪连接。 TCP是一种流协议(您发送的内容将在另一端以块的形式接收),另外还为每个接受的套接字连接创建端点套接字(主要的侦听套接字保持不变,尽管您可能需要调用listen())再次)。 UDP使用数据报,在另一端整体接收的数据块(除非大小大于MTU,但这是一个不同的故事)。

在我看来,这两段代码都使用TCP,因此底层协议是相同的,它们应该完全相互兼容。看起来好像你应该使用第二位代码,因为它的级别更高,但只有服务器才能真正使用它,客户端需要不同的代码,因为它不会监听,它连接...如果你能找到在相同抽象级别的“连接”代码,使用它。