【问题标题】:Can I have different types of sockets on same port?我可以在同一个端口上有不同类型的套接字吗?
【发布时间】:2012-12-07 16:17:06
【问题描述】:

我有一个奇怪的问题。我了解到套接字是 IP 和端口的组合。那么什么是套接字描述符呢?它只是一个整数吗?它有什么作用?

我可以在同一个端口上使用不同的套接字描述符吗?如果是,那么它们可以是不同的类型(TCP/UDP)吗?

我知道这些都是愚蠢的问题;我已经盲目使用 SD 很长一段时间了:P

【问题讨论】:

  • 查看几乎相同的问题:stackoverflow.com/questions/6437383/…
  • @NicholasWilson :这是确切的链接。现在唯一的疑问是。我觉得在这种情况下,相同的 IP 和端口会有 2 个不同的文件描述符,这在逻辑上是令人困惑的。如果我假设有 2 个指向同一个套接字的指针,那么就可以了,但是客户端请求本身会指示数据传输的类型(TCP/UDP)。

标签: sockets file-descriptor


【解决方案1】:

套接字描述符是当您要求系统通过套接字调用创建套接字时返回的唯一整数。每个套接字都可以通过其套接字描述符来识别。

关于你问题的第二部分,你会为同一个 IP+PORT+PROTOCOL 得到一个不同的套接字描述符,所以是的,你可以在同一个端口上有 tcp 和 udp 套接字,但是你会得到两个不同的套接字描述符

你应该先阅读这样的网络编程教程:Beej's Network Programming Tutorial

【讨论】:

  • 谢谢,现在清楚了。因此,如果我想建立多个连接,那么所有这些都需要连接到同一个套接字。就像我们连接到 gmail 时一样(忽略服务器集群)。端口 80/443 上有一个单独的套接字描述符,为所有连接提供服务。
  • @Guys,下面的链接说我们可以为同一个端口有多个套接字:stackoverflow.com/questions/6148174/…。多个套接字是否意味着多个套接字描述符?
  • stamhaney,我不认为你已经完全明白了。您可以拥有哪些套接字或连接以及在哪些端口上与您必须引用用户空间中的连接的套接字描述符完全无关。 @Ajit 不,对于 UDP,这意味着多个套接字。
  • @NicholasWilson :兄弟每次我靠近它时都会出现错误的转弯。是这样吗? : 和 number 标识一个套接字(IP+端口)。提供不同类型的连接的相同(IP+端口)可以有不同的编号。
  • @NicholasWilson,不太明白你的意思。您的意思是套接字描述符不是特定协议和端口的套接字调用返回的内容吗?
【解决方案2】:

TCP 和 UDP 是独立的,因此您可以在同一个端口上拥有 TCP 和 UDP 套接字。

套接字描述符之于套接字就像文件描述符之于文件。

一个TCP连接实际上是由元组定义的:本地IP,本地端口,远程IP,远程端口。您可以使用相同的本地 IP 和端口进行多个连接,只要它们具有不同的远程 IP 和/或端口即可。

例如,Web 服务器使用其本地端口 80 进行所有连接。但是每个客户端连接要么来自不同的机器(因此不同的远程 IP)或同一台机器上的不同套接字(因此它们将具有相同的远程 IP 但不同的远程端口)。

【讨论】:

  • @Barmar..感谢您的回复,但我认为您和 stamhany(下)提供的 asnwer 存在一些歧义。请检查。
  • @Barmar 是对的,同一个端口上可以有两个套接字,但是你会得到两个不同的套接字描述符。我已经更正了上面的答案
  • @Barmar..感谢更新。我想我现在明白了.. :-)
猜你喜欢
  • 2012-06-23
  • 2016-11-01
  • 2017-06-09
  • 2011-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-06
相关资源
最近更新 更多