gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 05:35:09 29 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. 套接字的 InputStream 和 OutputStream 不是独立的:它们有一个共同的互锁。

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

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

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