Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 具有多个客户端的UDP服务器的基本原理_Java_Udp_Client Server - Fatal编程技术网

Java 具有多个客户端的UDP服务器的基本原理

Java 具有多个客户端的UDP服务器的基本原理,java,udp,client-server,Java,Udp,Client Server,我正在Java中使用UDP实现一个FTP程序(TCP不是一个选项),但是我在掌握它应该如何工作的基础知识方面遇到了困难 据我所知,它是无连接的,所以我应该只运行一个服务器线程来处理任何客户机的每个请求 我感到困惑的是在实际的文件传输过程中。如果服务器处于循环中,将包含请求文件的比特的数据报发送到客户端,并等待来自客户端的ACK,而不是接收到来自不同客户端的完全不同的请求,那么我应该如何处理? 我知道我可以跳出循环来处理它,但是如果最初预期的数据包最终到达,我如何才能从我离开的地方开始呢?UDP服

我正在Java中使用UDP实现一个FTP程序(TCP不是一个选项),但是我在掌握它应该如何工作的基础知识方面遇到了困难

据我所知,它是无连接的,所以我应该只运行一个服务器线程来处理任何客户机的每个请求

我感到困惑的是在实际的文件传输过程中。如果服务器处于循环中,将包含请求文件的比特的数据报发送到客户端,并等待来自客户端的ACK,而不是接收到来自不同客户端的完全不同的请求,那么我应该如何处理?
我知道我可以跳出循环来处理它,但是如果最初预期的数据包最终到达,我如何才能从我离开的地方开始呢?

UDP服务器在许多方面与TCP服务器类似。主要区别在于,您不会收到您的数据包已收到的确认。您仍然需要知道要发送到哪个客户机,因此请使用
DatagramSocket
类。这是UDP的Oracle教程:。它有一个很好的例子。重要的部分是获取原始客户端的地址和端口,并将数据包返回给该客户端:

InetAddress address = packet.getAddress();
int port = packet.getPort();
new DatagramPacket(buf, buf.length, address, port);
您可以在服务器端启动一个新线程,以便在每次客户端发送请求时发送位。线程将保存客户端的返回地址和端口,并在文件发送完成时终止