【问题标题】:Do client and server need to use same port to connect?客户端和服务器是否需要使用相同的端口进行连接?
【发布时间】:2016-10-08 06:03:38
【问题描述】:

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

据我从该线程Java Networking: Explain InputStream and OutputStream in Socket 的回答中了解到,如果一台机器创建一个带有端口的套接字,那么该套接字就会绑定到该机器,那么为什么客户端和服务器需要使用相同的端口来相互连接呢?

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

【问题讨论】:

    标签: java sockets port


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      标准设置是让服务器进程使用服务器套接字侦听端口上的连接,例如 10000。客户端进程尝试使用客户端套接字连接到该端口。它将使用操作系统分配的端口。建立连接后,服务器将在其一侧分配另一个客户端套接字,以管理与客户端进程的通信,这也将有一个操作系统分配的端口。

      【讨论】:

      • 它将拥有与监听套接字相同的分配端口。
      【解决方案3】:

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

      【讨论】:

      • 客户端套接字使用与监听套接字相同的本地端口。
      猜你喜欢
      • 2021-01-07
      • 1970-01-01
      • 2021-10-03
      • 1970-01-01
      • 2021-10-10
      • 2014-11-09
      • 2019-09-10
      • 2019-07-12
      • 1970-01-01
      相关资源
      最近更新 更多