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

标签 java sockets port

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

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

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

最佳答案

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

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

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

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

关于java - 客户端和服务器是否需要使用相同的端口连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37694551/

相关文章:

java - 如何停止 ThreadPoolTask​​Executor 中所有正在运行的线程?

java - Java中集合的调用方法

java - 在构造函数中使用未初始化的变量

java - 为什么这个java代码显示 "non-static variable this cannot be referenced from a static context"错误?

c - 使用 UDP 的 Whois 服务

c++ - boost::asio::tcp 套接字上的双向通信

python - 将变量分配给 pyserial 端口

node.js - 使用 websockets 手动连接到 socket.io 1.x,容量测试

powershell - 如何使用powershell检查端口是否正在使用

tcp - 在 Centos os 8 运行 Plesk 防火墙中打开一个端口