2010-07-07 91 views
1

我需要將由C++應用程序創建的本機winsock套接字傳遞給我的應用程序中使用java.net.Socket連接到服務器的庫。 這winsock appication已經照顧連接插座。 如何顯式設置java.net.Socket的套接字描述符?將本地winsock套接字傳遞給java套接字

+0

你需要什麼用的? – 2010-07-07 09:38:03

+0

這個本地套接字綁定到特殊的硬件驅動程序。 – ApriOri 2010-07-07 09:46:28

+0

我會建議在C中創建一個包裝模塊,然後使用JNI來訪問它。 – 2010-07-07 14:15:49

回答

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

這很好,我只需要再向前一步,因爲我必須提供一個java套接字而不是輸入/輸出流。 – ApriOri 2010-07-08 11:24:55