当前位置: 首页 > 知识库问答 >
问题:

“套接字”:为什么连接到服务器时客户端地址和端口没有明确指定?

文建业
2023-03-14

我从这里读了一些套接字编程示例代码。我突然想到一个问题。

构建TCP套接字连接需要4元组:

<client address, client port, server address, server port>

但似乎只有<代码>

那么谁来决定<代码>

更正,上面粗体部分似乎不正确。服务器端口不变。参考:当服务器接受TCP连接时,端口是否会更改?

共有2个答案

丁雅惠
2023-03-14

那么谁来决定{code>{client address,client port}?

TCP/IP。它找出哪个IP地址具有到目标的最佳路由,并为您找到一个空闲端口。

为什么不明确地由客户端代码的程序员?

如果愿意,可以在连接之前通过bind()指定,但很少需要这样做。

该服务器端口仅用于侦听,而不是服务器实际用于通信的端口。

这是不对的。侦听和通信接受的连接使用相同的端口号。

谭思博
2023-03-14

这些客户端端口称为临时端口,这里对此进行了很好的解释:

https://en.wikipedia.org/wiki/Ephemeral_port

也许在这里更好:

http://www.ncftp.com/ncftpd/doc/misc/ephemeral_ports.html

不明显的是,当建立连接时,连接的客户端使用端口号。除非客户端程序明确请求特定的端口号,否则使用的端口号是临时端口号。临时端口是由机器的IP堆栈分配的临时端口,并为此目的从指定的端口范围分配。当连接终止时,临时端口可供重用,尽管大多数IP堆栈在使用整个临时端口池之前不会重用该端口号。因此,如果客户端程序重新连接,则会为其新连接一侧分配不同的临时端口号。

 类似资料:
  • 当我尝试使用套接字将物理设备连接到服务器时,我遇到了一个问题。在服务器端,它似乎不接受任何连接,而在客户端,套接字超时。你知道为什么会这样吗? 我在下面提供我的代码 服务器代码: 客户端: 11-16 23:32:11.016:W/系统。错误(24213):java.net。ConnectException:无法连接到/192.168.1.116(端口9090):连接失败:ETIMEDOUT(连接

  • 真的需要你帮忙。 我的项目是通过电缆连接两台PC机,并使用tcp套接字将客户端文本框形式的字符串发送到服务器。问题是ATI只能发送一个字符串,然后连接就会关闭。 注意:某个端口上的连接将在表单加载中建立并成功。

  • 我试图用java实现一个客户端服务器,在这里我读取客户端中的输入并在服务器中执行UperCase,然后返回客户端并打印UperCase。我使用ObjectOutputStream和ObjectInputStream进行读写,但是当我在客户机中键入一个msg时,程序会显示以下错误: Digite uma msg casa java.io.eofexception位于java.io.datainput

  • Java: 在C#中-它停止在“receiver=listener.accept();”在java(android)中-它停止于“sender_socket=new Socket(serverAddr,SERVERPORT);”这应该是java套接字函数的问题--需要另一个函数连接到C#-server。

  • 首先我要感谢你花时间... 我在macbook中用C++创建了一个服务器套接字,在运行windows XP的不同机器中用Java创建了一个客户机/套接字。我已将端口指定为5000,但无法指定正确的主机,因此无法进行连接。当我在windows xp中使用WinSock2创建一个C++服务器/套接字时,当我使用本地主机时,连接是完美的...有什么想法吗??? 提前Thnx int main(int a

  • Lua客户机中的on connection事件被触发并打印“connected”,但Node.js socket.io服务器中的on connection事件没有被触发。我用Python套接字服务器尝试了Lua客户机,它工作得很好!我还尝试了一个带有Javascript套接字客户端的Node.js套接字服务器,它运行得很好! NodeMCU和socket.io之间是否存在兼容性问题?