当前位置: 首页 > 面试题库 >

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

向锦
2023-03-14
问题内容

在服务器端,我们使用

Socket server = serverSocket.accept();

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

因此,以我的理解,我是否可以得出结论,在服务器端,我们可以在一个端口下创建多个套接字?(类似于网络服务器的功能)

其实我的问题是,在客户端,当我们创建一个套接字时,我们可以指定我们要使用的本地端口。在该本地端口上成功创建客户端套接字后,我们可以将该端口重用于其他客户端套接字吗?该端口是否永久绑定到套接字,直到套接字关闭(或端口关闭)?由于客户端没有“监听”的概念,我们是否可以做与ServerSocket相同的操作(请参阅ServerSocket可以在一个端口下创建多个套接字)?

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

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


问题答案:

因此,以我的理解,我是否可以得出结论,在服务器端,我们可以在一个端口下创建多个套接字?(类似于网络服务器的功能

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

其实我的问题是,在客户端,当我们创建一个套接字时,我们可以指定我们要使用的本地端口。

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

在该本地端口上成功创建客户端套接字后,我们可以将该端口重用于其他客户端套接字吗?

没有。

该端口是否永久绑定到套接字,直到套接字关闭(或端口关闭)?

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

由于客户端没有“监听”的概念,我们是否可以做与ServerSocket相同的操作(请参阅ServerSocket可以在一个端口下创建多个套接字)?

没有。



 类似资料:
  • 在服务器端,我们使用 若要创建套接字,请执行以下操作。套接字创建后,我们可以创建一个新线程来处理那个套接字的输入/输出流。因此,如果有更多的连接请求进入,我们可以返回到同一端口进行侦听,并创建新的套接字。由于我们已经在一个特定的端口创建了ServerSocket,因此我们当然不能在该端口再次创建另一个ServerSocket。 我很困惑客户端是如何处理端口和套接字的,因为我在比较ServerSoc

  • 服务器: 客户: 服务器开始侦听: 每个客户端连接将获得一个单独的套接字进行通信,所有的套接字都使用相同的服务器端TCP端口进行通信。

  • 本文向大家介绍串行端口和并行端口之间的区别,包括了串行端口和并行端口之间的区别的使用技巧和注意事项,需要的朋友参考一下 串口 串行端口提供连接串行线路以准备串行通信的接口。串行端口通常用于调制解调器,鼠标,安全摄像机等。串行端口使用DB-9连接器,该9针D型连接器连接到传输线。串行端口使用一条线提供串行通信,因此不依赖于另一条线的速度,并且其长度可以根据需要进行扩展。 并行端口 并行端口提供了连接

  • 问题内容: 我已经使用RMI创建了Server,Client之类的程序。但是,每当从命令提示符启动rmiregistry后运行服务器时,都会抛出已在使用中的错误。是我唯一开始rmiregistry的人。我已经从netstat检查了它。 服务器代码: 客户代码: 例外: 问题答案: 该在其过程中使用的端口1099,所以你不能在你使用它。要么: 通过(首选)以相同的过程启动注册表。 将对象导出到其他端

  • 问题内容: 我在使jQuery Ajax调用的成功函数无法正常工作方面遇到麻烦,并向我指出,原因是我的PHP函数在应使用echo $ result时正在使用return$ result。 将Ajax调用的PHP函数从“ return $ result”更改为“ echo $ result”可以解决问题,但是为什么呢?关于PHP脚本,两者之间的区别(返回和回显)有很多解释,但是将值发送给Ajax调用

  • kubectl端口转发(将端口从本地主机转发到集群中的pod以获得对集群资源的访问)和NodePort服务类型之间有什么区别?