Что такое .Net Socket.Handle эквивалент для Java - PullRequest
0 голосов
/ 24 мая 2018

В java есть ли какие-либо функциональные возможности, эквивалентные приведенным ниже функциям c #.

Socket.Handle

https://msdn.microsoft.com/en-us/library/system.net.sockets.socket.handle(v=vs.110).aspx

Я искал в Интернете, а также проверил свойства java.net.Socketно я не мог извлечь подобную вещь.Любая информация приветствуется.

Большое спасибо.

1 Ответ

0 голосов
/ 24 мая 2018

Если я правильно понял, вам в основном нужно socket.getImpl().getFileDescriptor().fd.Ни один из этих методов / полей не является общедоступным, оставляя отражение в качестве единственной опции:

static int getHandle(Socket socket) throws ReflectiveOperationException {
    Method getImpl = Socket.class.getDeclaredMethod("getImpl");
    getImpl.setAccessible(true);
    SocketImpl impl = (SocketImpl) getImpl.invoke(socket);
    Method getFileDescriptor = SocketImpl.class.getDeclaredMethod("getFileDescriptor");
    getFileDescriptor.setAccessible(true);
    FileDescriptor fileDescriptor = (FileDescriptor) getFileDescriptor.invoke(impl);
    Field fd = FileDescriptor.class.getDeclaredField("fd");
    fd.setAccessible(true);
    return (int) fd.get(fileDescriptor);
}

Начиная с Java 9, это сопровождается кучей предупреждений:

ПРЕДУПРЕЖДЕНИЕ: произошла недопустимая операция доступа с отражением
...
ПРЕДУПРЕЖДЕНИЕ: Все недопустимые операции доступа будут отклонены в следующем выпуске

В заключение, (просто)Java, вероятно, не подходит для этого требования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...