C# 客户机如何知道它必须在服务器或服务器上连接的端口提供了这样的信息。?

C# 客户机如何知道它必须在服务器或服务器上连接的端口提供了这样的信息。?,c#,C#,我想知道,在客户机和服务器之间的通信中,客户机如何知道,为了满足特定的请求,它必须连接到服务器的特定端口。虽然服务器必须给出响应消息,但它如何知道它必须连接到特定的客户机。服务器是否向客户端提供它必须连接到特定端口的任何信息 客户端需要知道要连接到哪个端口。 有些协议具有默认端口,如HTTP在未指定其他端口的情况下具有端口80 向服务器请求端口是“不可能的”,因为请求时需要连接到端口,然后需要知道“ask”-端口的编号。 在某些协议中,您实际上可以连接到标准端口,而对于在该端口上打开反向通道的端

我想知道,在客户机和服务器之间的通信中,客户机如何知道,为了满足特定的请求,它必须连接到服务器的特定端口。虽然服务器必须给出响应消息,但它如何知道它必须连接到特定的客户机。服务器是否向客户端提供它必须连接到特定端口的任何信息

客户端需要知道要连接到哪个端口。
有些协议具有默认端口,如HTTP在未指定其他端口的情况下具有端口80

向服务器请求端口是“不可能的”,因为请求时需要连接到端口,然后需要知道“ask”-端口的编号。
在某些协议中,您实际上可以连接到标准端口,而对于在该端口上打开反向通道的端口,您仍然知道初始连接的端口号

…客户机如何知道,为了满足特定请求,它必须连接到服务器的特定端口

客户机可以直接被告知使用哪个端口(例如,
http://example.com:123
告诉您的浏览器在端口123上执行HTTP),或使用(它“知道”的,因为该信息内置在其代码中)。有很多“众所周知”的端口——80个用于HTTP,22个用于SSH,110个用于POP3

虽然服务器必须给出响应消息,但它如何知道它必须连接到特定的客户机

当客户端连接到服务器时,它是通过一个叫做“套接字”的东西连接的。服务器只是在同一个套接字上应答。如果您对技术细节感兴趣,您需要深入了解TCP/IP的工作方式,但是IIRC客户端IP和客户端上的端口(“源端口”)都在服务器接收的TCP数据包中,因此服务器知道要回复的地址和端口。在使用套接字级别,您(服务器)只需发送到客户端连接时建立的套接字。

单个服务器侦听端口号。想象一个海港,在那里船只可以进入并转移他们的资源&将资源带到另一个国家。当端口打开时,它接受船只进入并执行操作。但如果港口关闭,船只将无法进入它与网络端口相同。如果internet路由器中的端口已关闭,则任何连接都无法通过它成功执行联网操作。设想一个类似于站点的端口,网络数据包通过该端口

现在,HTTP服务器通常在端口80上运行,这意味着它将侦听端口80上的新客户端。现在流行的web浏览器默认配置为在端口80上加载连接,因为它是HTTP网页的默认全球端口号。如果您将默认端口更改为81,并尝试连接到承载在端口80上的网站,则您的连接将断开,除非您尝试通过HTTP协议访问的服务器也侦听端口81

现在,除了HTTP,假设你有一个游戏服务器,它是一样的,但只是一个实时连接(考虑到HTTP服务器是一个执行连接,生成响应头并终止连接),你可以为你的游戏服务器决定任何端口,就像你可以为任何侦听器决定任何端口号一样,比如4557。如果希望客户端连接到游戏服务器,端口号必须与服务器的端口号相同,因为服务器使用该端口传输连接

古老的 您的客户端应该已经知道它将连接到的端口目标。 有不同类型的服务器,例如HTTP服务器,通常侦听端口80。当您的浏览器发送请求并到达服务器时,客户端(您的浏览器)会随请求一起发送请求头。服务器通常接受客户机,读取他的请求并生成响应头并将其写入客户机,然后终止连接。
一些具有实时连接的服务器以类似的方式工作,除非它缓存连接的客户端并同时处理所有客户端。

如果我在客户端计算机上,并且我想向服务器发送请求,那么我如何知道我必须提到一个特定的端口(例如端口80)来满足此请求,或者我的计算机如何知道它必须在端口80上发送此请求消息。是否存在这样的情况我只是在任何端口上发送数据,然后服务器将其重定向到我想要询问的所需端口的机制——这是在客户机上进行编码的人必须知道的,它必须使用特定端口。或者还有其他机制吗?不,服务器无法将您指向端口。您必须准确地寻址一个端口,并事先知道该端口。我已经理解了问题第二部分的答案,但请更详细地告诉我,客户如何知道它必须在特定端口上发送特定数据……我的意思是谁负责处理它。@user3843784:这是客户的责任给客户写信的人。让我们以web浏览器为例:编写web浏览器的人让用户告诉浏览器要使用哪个端口(在URL中,
http://example.com:123
),但如果用户没有告诉浏览器要使用哪个端口,编写浏览器的人就会在浏览器的代码中写下应该使用端口80。这只是硬编码信息,基于HTTP的默认端口是端口80的事实。现在假设我必须在LAN上从一台机器向另一台机器发送数据包,并且我正在为客户端编写代码,你的意思是我必须在代码中提到端口号。但是我怎么知道我必须提到一个特定的端口号才能发送数据包呢。我是否可以分配随机端口号…?@user3843784:如果您正在创建服务器/协议,则可以选择端口号。注意