我读了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?感谢。
答案 0 :(得分:4)
UDP是无连接的,但可以在套接字对象的两端强制执行伪连接。 TCP是一种流协议(您发送的内容将在另一端以块的形式接收),另外还为每个接受的套接字连接创建端点套接字(主要的侦听套接字保持不变,尽管您可能需要调用listen())再次)。 UDP使用数据报,在另一端整体接收的数据块(除非大小大于MTU,但这是一个不同的故事)。
在我看来,这两段代码都使用TCP,因此底层协议是相同的,它们应该完全相互兼容。看起来好像你应该使用第二位代码,因为它的级别更高,但只有服务器才能真正使用它,客户端需要不同的代码,因为它不会监听,它连接...如果你能找到在相同抽象级别的“连接”代码,使用它。