TCP服务器(使用java.io包)应该是多线程的,以便它可以同时支持多个客户端。但是,UDP服务器不需要是多线程的,以便同时为多个客户端提供服务。任何人都可以解释为什么会这样吗?
答案 0 :(得分:1)
(java.io
)TCP服务器需要多线程,因为与每个客户端的通信都发生在io流上。每次读/写消息时,每个流的通信块。
UDP服务器不通过io流进行通信。它通过同一通道上所有客户端的单个数据报直接通信。
假设您的服务器有10个客户端,并等待其中任何一个发送。
TCP需要10个线程,每个线程调用InputStream#read()
方法和所有块。在某一点上1将被唤醒。 “消息”不需要包含发件人地址,因为这是通过流/连接暗示的。
UDP需要一个调用DatagramSocket#receive()
方法的线程。数据包将包含发件人地址,因此1个线程可以决定要执行的操作。