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和UDP套接字可以使用相同的端口吗?_Sockets_Networking_Tcp_Udp - Fatal编程技术网

Sockets TCP和UDP套接字可以使用相同的端口吗?

Sockets TCP和UDP套接字可以使用相同的端口吗?,sockets,networking,tcp,udp,Sockets,Networking,Tcp,Udp,首先,在同一台服务器上同时使用UDP和TCP有什么问题吗 其次,我可以使用相同的端口号吗?是的,您可以对TCP和UDP使用相同的端口号。许多协议已经做到了这一点,例如DNS在udp/53和tcp/53上工作 从技术上讲,每个协议的端口池都是完全独立的,但对于可以使用TCP或UDP的更高级别协议,它们的默认端口号是相同的 在编写服务器时,请记住,TCP套接字的事件顺序要比UDP套接字的事件顺序困难得多,因为除了正常的socket和bind调用之外,您还必须侦听和接受 此外,accept调用将返回一

首先,在同一台服务器上同时使用UDP和TCP有什么问题吗


其次,我可以使用相同的端口号吗?

是的,您可以对TCP和UDP使用相同的端口号。许多协议已经做到了这一点,例如DNS在udp/53和tcp/53上工作

从技术上讲,每个协议的端口池都是完全独立的,但对于可以使用TCP或UDP的更高级别协议,它们的默认端口号是相同的

在编写服务器时,请记住,TCP套接字的事件顺序要比UDP套接字的事件顺序困难得多,因为除了正常的
socket
bind
调用之外,您还必须
侦听
接受


此外,
accept
调用将返回一个新套接字,然后您还必须轮询该套接字以获取接收事件。您的服务器应准备好继续在原始套接字上接受连接,同时为多个客户端提供服务,每个客户端都将在其自己的套接字上触发接收事件。

首先,在服务器上同时使用tcp和udp没有问题


其次,我们可以在同一个端口上同时使用UDP和TCP请求,因为每个请求都由源IP、目标IP、源端口、目标端口、协议(因为协议可以是TCP或UDP)所包含的五元组来标识。

@Eric Fortis RFC 1700充满了示例,我们不必全部列出,好吗?;-)@Eric Fortist为什么“每个人都应该知道”NetBIOS端口号?请将其作为一个问题发布,以便您可以给我答案这一答案没有解释的东西:“端口”语义特定于传输级别(OSI模型级别4)的每个协议(但有些可能没有此语义)。因此TCP有自己的端口,这些端口由TCP堆栈解释;UDP有自己的端口,这些端口由UDP堆栈解释。也就是说,UDP和TCP之间不共享端口;碰巧两个协议都有相同的“端口”定义,为了简化,我们对同一服务的不同类型的多个连接使用相同的端口值。@EricFortis,因为这样的问题对我或其他任何人都没有任何意义,您认为有趣的原因是什么,同样,你也反对引用一个RFC,这正是我们正在讨论的目的。你陈述的理由经常被给出,但实际上毫无意义。不存在UDP连接,也不存在考虑连接的上下文,无论关联的协议如何。事实上,端口分别是TCP和UDP的人工制品,因此不可能混淆它们。感谢您指出我的错误。没有使用UDP的连接是正确的。