2014-06-24 23 views
0

我有一個Java項目,我需要發送和接收只有以太網頭存在的網絡數據包。頭部也包含自定義MAC地址,它們與接收/發送接口的物理硬件地址不匹配。使用jNetPcap發送和接收以太網幀時的線程安全性

我選擇了jNetPcap 1.3來完成這個任務,但是我關心我的Java應用程序的線程安全性,並且需要一些關於libpcap的特殊性的幫助。

我有兩個線程,其中第一線程執行

org.jnetpcap.Pcap.loop(Pcap.LOOP_INFINITE, handler, outputQueue) 

循環來從先前打開org.jnetpcap.Pcap對象(表示pcap_t)捕獲數據包由呼叫者傳遞給線程。

第二線程應該從輸入隊列挑有效載荷/報頭對和使用

org.jnetpcap.Pcap.sendPacket(packetByteBuffer) 

使用SAMEorg.jnetpcap.Pcap Object作爲線程執行所述接收環路發送它們。


問題:

從使用谷歌我的結論是,這種做法是不是因爲libpcap工作訪問來自不同的線程在同一pcap_t對象時不是線程安全的。

理論解:

我認爲,解決我的問題是創建的org.jnetpcap.Pcap兩個獨立的情況下,使用org.jnetpcap.Pcap.openLive()並通過一個實例的傳輸線和一個接收線程單獨打開它們。

在我改變了很多代碼之前,我希望有人能證實這確實是解決這個問題的正確方法。

在此先感謝您的答案。

回答

0

您必須以某種方式同步線程之間的訪問權限,例如,你可以使用

jNetPcap Documentation然而安全的各種PCAP從多個線程對象,只要訪問外部同步互動。

+0

謝謝您的澄清。我完全錯過了那些文檔。也許我會回到jNetPcap,因爲現在我決定用JNI構建我自己的庫來訪問原始套接字。 – aMpeX