为什么我的 TCP 系统比 UDP 系统快?

我有两个(客户端 - 服务器 - 客户端)系统。第一个使用 TCP,第二个使用 UDP。有趣的是,当传输大小为 5-6 mb 的文件时,我使用 TCP 的系统比使用 UDP 的系统快。问题是因为我的编码错误还是会发生?


TCP客户端


   try {

       socket = new Socket("localhost", 7755);

   } catch (Exception e) {

       System.out.println(e.getMessage().toString());

   }


   out = new PrintWriter(socket.getOutputStream(), true);


   int i = 0;


   while (file.hasNext()) {

       String line = file.nextLine();

       if (!line.isEmpty()) {

           out.println(line);

       }

       i++;

   }

TCP服务器


     try {

          serverSocketA = new ServerSocket(7755);

          serverSocketB = new ServerSocket(7760);

     } catch (Exception e) {

          System.out.println("Port error!");

     }

     System.out.println("Server is ready...");

     clientSocketA = serverSocketA.accept();

     clientSocketB = serverSocketB.accept();


     PrintWriter out = new PrintWriter(clientSocketB.getOutputStream(), true);


     BufferedReader in = new BufferedReader(new InputStreamReader(clientSocketA.getInputStream()));


     while((dataFromClientA = in.readLine()) != null) {

          out.println(dataFromClientA);

     }

UDP服务器


private static byte[] buf = new byte[6];

static Scanner file;


public static void main(String[] args) throws IOException{

    long startTime = System.currentTimeMillis();

    socket = new DatagramSocket();

    address = InetAddress.getByName("localhost");

    file = new Scanner(new File("sentfile.txt"));

    DatagramPacket packet;

    while (file.hasNext()) {

        String line = file.nextLine();

        if (!line.isEmpty()) {

            buf = line.getBytes();

            packet = new DatagramPacket(buf, buf.length, address, 7765);

            socket.send(packet);

        }

    }



我只是添加了 client1 和服务器代码,其余的类似。可能是什么原因?


开满天机
浏览 154回答 2
2回答

波斯汪

TCP 已经由世界上一些最伟大的网络专家进行了大量优化。它专为尽可能快速有效地通过 IP 网络发送数据流而设计。它与内核相关联,并且在大多数现代平台上作为一个单元进行了大量优化。除非它做了一些你不需要的事情,否则你不会超越它,并且你可以从不做那件事中获得显着的好处。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java