Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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
Sockets 在同一端口上绑定两个不同协议时,TCP/IP如何识别正确的套接字_Sockets_Tcp_Network Programming_Datagram - Fatal编程技术网

Sockets 在同一端口上绑定两个不同协议时,TCP/IP如何识别正确的套接字

Sockets 在同一端口上绑定两个不同协议时,TCP/IP如何识别正确的套接字,sockets,tcp,network-programming,datagram,Sockets,Tcp,Network Programming,Datagram,当然,在这里我发现了一些我以前不知道/没有意识到的事情。 一个进程可以绑定两个不同协议的特定端口。 例如,TCP和UDP的相同端口X。(还有其他众所周知的例子吗? 但这怎么可能呢? 我的意思是如果我做了新的DatagramSocket(6789)和新服务器插座(6789) 我假设我可以在我的程序中同时接受TCP和UDP,并将其委托给不同的类。对吗? 但这实际上是如何工作的呢?java是否了解客户端是否正在使用TCP或UDP,并将套接字传递给相应的类?端口存在于协议的命名空间中。它不是相同的端口,

当然,在这里我发现了一些我以前不知道/没有意识到的事情。
一个进程可以绑定两个不同协议的特定端口。
例如,
TCP
UDP
的相同端口
X
。(还有其他众所周知的例子吗?
但这怎么可能呢?
我的意思是如果我做了
新的DatagramSocket(6789)
新服务器插座(6789)
我假设我可以在我的程序中同时接受
TCP
UDP
,并将其委托给不同的类。对吗?

但这实际上是如何工作的呢?java是否了解客户端是否正在使用
TCP
UDP
,并将套接字传递给相应的类?

端口存在于协议的命名空间中。它不是相同的端口,只是相同的端口号


Java也与之无关。

为什么要投否决票?请说明与Java无关;您的操作系统知道TCP和UDP之间的区别。相关:对于java,还有许多其他类似的Qgeneral@BrianRoach:因此,不知何故,这两个类的实现向操作系统注册它们的协议,并且操作系统知道在哪里传递什么连接?再次。。。TCP和UDP是完全不同的东西。使用相同的端口号是不相关的。如果客户端发送UDP数据包,UDP:6789与TCP:6789完全无关。。。这是一个UDP数据包。服务器的网络堆栈将其作为UDP数据包接收,并将其作为UDP数据包发送到您的进程。