gpt4 book ai didi

java - 用 SocketChannel.open().socket() 替换 new Socket() 有问题吗?

转载 作者:行者123 更新时间:2023-12-02 06:16:04 26 4
gpt4 key购买 nike

如果我简单地更换会出现什么问题

socket = new Socket()

socket = SocketChannel.open().socket()?

背景:我有一些使用 new Socket() 的遗留代码,并且我希望能够中断 socket.connect() 调用。我不想重写代码来使用 NIO。我了解到 Thread.interrupt() 不会中断 socket.connect(),但假设另一个线程上的 socket.close()中断连接。奇怪的是,这适用于 Java 7,但不适用于 Java 6。

不知何故,我想到使用 socket = SocketChannel().open().socket() 会神奇地允许我使用 Thread.interrupt()中断socket.connect()。事实并非如此,但奇怪的是,它确实使 Java 6 中的 socket.close() 中断 socket.connect()!

请注意,我没有以任何方式直接使用附加的 SocketChannel——它在我创建 Socket 时出现,并且再也不会出现。

这会出什么问题?

最佳答案

有几个。

  1. 通过 SocketChannel 获取的 Socket 似乎不支持读取超时。
  2. 套接字的输入流和输出流不是独立的:它们具有共同的互锁。

为什么要中断 connect() 调用?当然您想要的只是连接超时?

关于java - 用 SocketChannel.open().socket() 替换 new Socket() 有问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30821088/

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