为什么UDP服务器不需要多线程同时为多个客户端服务?

时间:2015-11-29 15:53:59

标签: java multithreading tcp udp java-io

TCP服务器(使用java.io包)应该是多线程的,以便它可以同时支持多个客户端。但是,UDP服务器不需要是多线程的,以便同时为多个客户端提供服务。任何人都可以解释为什么会这样吗?

1 个答案:

答案 0 :(得分:1)

java.io)TCP服务器需要多线程,因为与每个客户端的通信都发生在io流上。每次读/写消息时,每个流的通信块。

UDP服务器不通过io流进行通信。它通过同一通道上所有客户端的单个数据报直接通信。

假设您的服务器有10个客户端,并等待其中任何一个发送。

  • TCP需要10个线程,每个线程调用InputStream#read()方法和所有块。在某一点上1将被唤醒。 “消息”不需要包含发件人地址,因为这是通过流/连接暗示的。

  • UDP需要一个调用DatagramSocket#receive()方法的线程。数据包将包含发件人地址,因此1个线程可以决定要执行的操作。