我有一個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()
並通過一個實例的傳輸線和一個接收線程單獨打開它們。
在我改變了很多代碼之前,我希望有人能證實這確實是解決這個問題的正確方法。
在此先感謝您的答案。
謝謝您的澄清。我完全錯過了那些文檔。也許我會回到jNetPcap,因爲現在我決定用JNI構建我自己的庫來訪問原始套接字。 – aMpeX