繁体   English   中英

客户端和服务器是否需要使用相同的端口进行连接?

[英]Do client and server need to use same port to connect?

我有一个使用Java的Server-Client程序,我尝试创建一个具有端口的ServerSocket和具有不同端口的Client Socket ,它们无法相互连接。 客户端抛出ConnectException 当我将Client上的套接字更改为与ServerSocket所用的套接字相同时,它们起作用了。

据我从Java联网这个线程的错误理解如果一台计算机创建一个带有端口的套接字,则解释Socket中的InputStream和OutputStream,然后将该套接字绑定到该计算机,那么为什么客户端和服务器需要使用相同的端口来连接到彼此?

另外,两个应用程序不能使用机器上的相同端口,那么当两个不同的具有相同端口的服务器和一台机器需要通过2个不同的应用程序连接到两者时会发生什么?

您需要对TCP通信有一些基本的了解。 只是Google TCP教程。

简而言之; 服务器将在特定端口上侦听。 当服务器在端口上侦听时,它将绑定到该端口。 机器上只有一个服务器(或进程)可以在某个端口上侦听。

客户端将连接到计算机并指定要进行通信的端口。 如果服务器正在侦听客户端要求的端口,则会发生通信。 否则,连接将无法继续。

因此,服务器绑定(或监听)的端口必须与客户端指定的端口相同。

客户端和服务器不需要使用相同的端口。 正如您所指出的,一个端口一次只能在一个计算机上分配一个进程。 更准确地说,端口和IP地址对是分配单元。 因此,如果您的计算机有两个或多个地址,则每个IP可以将端口绑定到不同的进程。

标准设置用于服务器进程使用服务器套接字侦听端口(例如10000)上的连接。 客户端进程尝试使用客户端套接字连接到该端口。 它将使用操作系统分配的端口。 一旦建立连接,服务器将在其一侧分配另一个客户端套接字,以管理与客户端进程的通信,并且还将为OS分配端口。

答案是否定的,服务器将在特定端口上侦听,但是当客户端开始连接到服务器时例如:服务器在端口80上侦听当客户端连接到服务器时,它将连接到端口80上的serverIP地址。客户端套接字位于另一个端口上端口,由操作系统分配

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM