Мне нужно передать собственный сокет winsock, созданный приложением C++, в библиотеку моего приложения, которое использует java.net.Socket для подключения к серверу. Эта аппликация winsock уже заботится о подключении сокета. Как я могу явно указать дескриптор сокета java.net.Socket?Передача родного winsock-сокета в java-сокет
1
A
ответ
1
Я столкнулся с такой проблемой в Unix, не уверен, что тот же механизм работает с вами в WinSock.
В нашем случае программа на C создает сокет с использованием специального оборудования. Программа C запускает программу Java, которая передает ей сокет. Затем программа Java создает поток ввода-вывода из файлового дескриптора сокета, чтобы он мог читать/писать ему, как обычный сокет.
фрагмент кода Java находится здесь,
Class<FileDescriptor> clazz = FileDescriptor.class;
Constructor<FileDescriptor> c;
try {
c = clazz.getDeclaredConstructor(new Class[] { Integer.TYPE });
} catch (SecurityException e) {
e.printStackTrace();
return;
} catch (NoSuchMethodException e) {
e.printStackTrace();
return;
}
c.setAccessible(true);
FileDescriptor fd;
try {
fd = c.newInstance(new Integer(socket));
} catch (IllegalArgumentException e) {
e.printStackTrace();
return;
} catch (InstantiationException e) {
e.printStackTrace();
return;
} catch (IllegalAccessException e) {
e.printStackTrace();
return;
} catch (InvocationTargetException e) {
e.printStackTrace();
return;
}
FileOutputStream os = new FileOutputStream(fd);
FileInputStream is = new FileInputStream(fd);
+0
Thats nice, мне просто нужен еще один шаг вперед, поскольку я должен предоставить java-сокет, а не потоки ввода-вывода. – ApriOri
Что вам нужно? –
Этот родной сокет привязан к специальному аппаратным драйверам. – ApriOri
Я бы рекомендовал создать модуль-оболочку на C, а затем использовать JNI для доступа к этому. –