gpt4 book ai didi

Java Socket和ServerSocket在使用端口上的区别

转载 作者:可可西里 更新时间:2023-11-01 02:32:28 30 4
gpt4 key购买 nike

在服务器端,我们使用

Socket server = serverSocket.accept();

创建套接字。创建套接字后,我们可以创建一个新线程来处理该套接字的输入/输出流。因此,如果有进一步的连接请求进入,我们可以返回监听同一端口并创建新套接字。由于我们已经在特定端口创建了 ServerSocket,当然我们不能在该端口再次创建另一个 ServerSocket。

那么根据我的理解,我是否可以得出结论,在服务器端,我们可以在一个端口下创建多个套接字? (类似于网络服务器所做的)

实际上我的问题是,在客户端,当我们创建套接字时,我们可以指定我们想要使用的本地端口。在我们在该本地端口成功创建了一个客户端套接字之后,我们是否可以将该端口重新用于其他客户端套接字?在套接字关闭(或端口关闭)之前,该端口是否永久绑定(bind)到套接字?由于客户端没有“Listening”的概念,我们是否可以像ServerSocket一样做同样的事情(引用ServerSocket可以在一个端口下创建多个套接字)?

我对客户端如何处理端口和套接字感到非常困惑,因为我正在将 ServerSocket 与客户端套接字进行比较。

请指出正确的方向,我知道我的想法是错误的。非常感谢。

最佳答案

So from my understanding, can I conclude that, at server side, we can create multiple sockets under one port? (similar to what web server does)

您混淆了自己的术语。 ServerSocket.accept() 接受 连接, 并将端点包装在 Socket 中。根据 RFC 793 的定义,端点与 ServerSocket 具有相同的本地端口号,因此包装 Socket 也是如此。

Actually my question is, at client side, when we are creating a socket, we can specify the local port that we want to use.

我们可以,但我们很少这样做。

After we have successful created a client socket at that local port, can we reuse that port for other client socket?

没有。

Does that port bind to the socket permenantly until the socket is closed (or port close)?

是的,或者相反:套接字绑定(bind)到端口。

Since there is no "Listening" concept at client side, are we able to do the same thing as ServerSocket does (refer to ServerSocket can create multiple socket under one port)?

没有。

关于Java Socket和ServerSocket在使用端口上的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17730392/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com