Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.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 如何在与客户端建立TCP连接的同时建立UDP连接?_Java_Tcp_Udp - Fatal编程技术网

Java 如何在与客户端建立TCP连接的同时建立UDP连接?

Java 如何在与客户端建立TCP连接的同时建立UDP连接?,java,tcp,udp,Java,Tcp,Udp,我有一个简单的服务器,它有一个主线程,接受客户机,并为每个客户机启动一个新线程。因此,在这个线程中,我想与客户端建立另一个连接(UDP),但我感到困惑。如果有10个线程(客户端)正在运行,并且所有10个线程都试图打开具有相同端口的DatagramSocket,那么将抛出SocketBindException,对吗?那么我该怎么做呢?只需为每个UDP连接使用不同的端口即可。可以向每个线程传递两个值,即通过TCP连接的客户端和线程可用于连接客户端的UDP端口,并且它将仅使用该端口。这样就不会发生冲突

我有一个简单的服务器,它有一个主线程,接受客户机,并为每个客户机启动一个新线程。因此,在这个线程中,我想与客户端建立另一个连接(UDP),但我感到困惑。如果有10个线程(客户端)正在运行,并且所有10个线程都试图打开具有相同端口的DatagramSocket,那么将抛出SocketBindException,对吗?那么我该怎么做呢?

只需为每个UDP连接使用不同的端口即可。可以向每个线程传递两个值,即通过TCP连接的客户端和线程可用于连接客户端的UDP端口,并且它将仅使用该端口。这样就不会发生冲突,启动线程的方法知道哪个线程正在使用哪个端口进行UDP。

  • 客户端通过TCP连接到服务器
  • 决定侦听哪个UDP端口。将该信息发送到服务器 通过TCP
  • 生成一个线程,绑定到UDP端口成为UDP服务器

  • 服务器接收TCP套接字上的UDP端口信息
  • 生成接收端口信息的UDP线程。变成UDP 客户
  • UDP线程连接到UDP服务器(也是TCP服务器) 客户)
如果本地端口已打开,绑定将失败,但没有任何东西可以阻止您打开多个本地端口,每个工作线程一个端口。服务器只向发送消息的远程ip/端口发送回复,回复将转到原始发送线程

如果服务器可能是第一个将UDP发送回客户机的,那么您必须经历在绑定后检索本地端口并通过TCP通道将其发送到服务器(或者提前选择端口号并显式绑定到它)的额外麻烦


如果UDP通信是单向的,则可以在主线程中绑定UDP端口,并在所有工作线程中重新使用它。UDP连接较少,因此无需维护任何状态。

在发送给客户端的UDP消息中,TCP服务器通过UDP套接字充当UDP发送方。没有UDP连接。

没有UDP连接。为什么您认为需要不止一个UDP套接字?你没有。