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

时间:2016-06-08 06:12:20

标签: java sockets port

我有一个使用java的服务器 - 客户端程序,我试图创建一个带有端口的ServerSocket和具有不同端口的客户端Socket,它们无法相互连接。客户抛出ConnectException。当我将Client上的套接字更改为我用于ServerSocket的套接字时,它们可以工作。

正如我从这个线程Java Networking: Explain InputStream and OutputStream in Socket的aswer那样理解,如果一台机器创建一个带端口的套接字然后该套接字绑定到该机器,那么为什么客户端和服务器需要使用相同的端口连接到每个其他

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

3 个答案:

答案 0 :(得分:4)

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

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

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:-1)

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

相关问题