Sockets 我可以在同一端口上使用不同类型的插座吗?

Sockets 我可以在同一端口上使用不同类型的插座吗?,sockets,file-descriptor,Sockets,File Descriptor,我有一个奇怪的问题。我了解到套接字是IP和端口的组合。那么什么是套接字描述符呢?它只是一个整数吗?它有什么作用 我可以在同一端口上使用不同的套接字描述符吗?如果是,那么它们可以是不同的类型(TCP/UDP)吗 我知道这些都是愚蠢的问题;我盲目地使用SD已经有相当长的一段时间了:当您要求系统使用套接字调用创建套接字时,套接字描述符是系统返回的唯一整数。每个套接字都可以通过其套接字描述符来识别 关于问题的第二部分,对于同一IP+端口+协议,您将获得不同的套接字描述符,因此,是的,您可以在同一端口上使

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

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


我知道这些都是愚蠢的问题;我盲目地使用SD已经有相当长的一段时间了:当您要求系统使用套接字调用创建套接字时,套接字描述符是系统返回的唯一整数。每个套接字都可以通过其套接字描述符来识别

关于问题的第二部分,对于同一IP+端口+协议,您将获得不同的套接字描述符,因此,是的,您可以在同一端口上使用tcp和udp套接字,但您将获得两个不同的套接字描述符


您应该先阅读以下网络编程教程:

TCP和UDP是独立的,因此可以在同一端口上使用TCP和UDP套接字

套接字描述符与套接字的关系就像文件描述符与文件的关系一样

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


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

谢谢,现在已经清楚了。所以,如果我想建立多个连接,那么所有这些都需要连接到同一个套接字。比如当我们连接到gmail时(忽略服务器集群)。端口80/443上有一个套接字描述符为所有连接提供服务。@Guys,下面的链接说我们可以为同一端口提供多个套接字:。多重套接字是指多重套接字描述符吗?stamhaney,我想你还不太明白。您可以拥有的套接字或连接以及端口与您必须在用户空间中引用连接的套接字描述符完全无关@不,对于UDP来说,它意味着多个套接字。@NicholasWilson:兄弟,每次我靠近它,就会有一个错误的转弯。是这样吗和编号标识一个套接字(IP+端口)。同一个(IP+端口)可以有不同的号码提供不同的连接。@NicholasWilson,我不太明白你的意思。你是说套接字描述符不是特定协议和端口的套接字调用返回的吗?@Barmar..谢谢你的回复,但我认为你和stamhany(下面)提供的asnwer中存在一些歧义。请检查。@Barmar是对的,同一端口上可以有两个套接字,但您将得到两个不同的套接字描述符。我已经改正了我的答案above@Barmar..thanks为了更新。我想我现在明白了…-)请看几乎相同的问题:@NicholasWilson:这是确切的链接。现在唯一的疑问是。我觉得在这种情况下,相同的IP和端口将有两个不同的文件描述符,这在逻辑上是混乱的。如果我假设有两个指向同一套接字的指针,那么就可以了,但是这些指针的需要是什么,因为客户端请求本身将指示数据传输的类型(TCP/UDP)。