शामिल रॉ सॉकेट प्रोग्रामिंग के लिए मैं कुछ मौजूदा सी कोड ICMP कच्चे सॉकेट का उपयोग करता है पिंग क्या करना है और मैं जावा ICMP संकुल का समर्थन नहीं करता के रूप में जावा में इस कोड का उपयोग करने की आवश्यकता है। जब मैं जेएनआई में कोड लपेटता हूं और इसे कॉल करता हूं, तो सी कोड करते समय सॉकेट प्राप्त करने में विफल रहता है:सबसे अच्छा तरीका है जावा
सॉकेट (AF_INET, SOCK_RAW, 1);
मुझे लगता है कि जावा कुछ विशेषाधिकार है कि जावा प्रक्रिया से कच्चे सॉकेट के उपयोग को निष्क्रिय गिरावट आई है। यह मुझे एक समाधान मिलना चाहिए।
मैं निम्नलिखित देखा है:
- अगर मैं एक सी प्रोग्राम लिखने और रनटाइम काँटेदार कोड का उपयोग कर सॉकेट खोल सकता है जावा से फोन है कि।
- यदि मैं ग्रहण से यह मूल कोड चलाता हूं तो यह अच्छी तरह से चलता है। मुझे लगता है कि यह इस तथ्य से आता है कि eclipse eclipse.exe से शुरू किया गया है, और java.exe से नहीं।
इसका मतलब है कि मैं इन दो रणनीतियों में से किसी एक को चुनकर अपनी समस्या का समाधान कर सकता हूं, लेकिन मुझे न तो पसंद है। क्या कोई और तरीका है कि मैं जावा को यह स्वीकार करने के लिए प्राप्त कर सकता हूं कि जेएनआई कोड इस सॉकेट को खोल रहा है?
संपादित करें: जितना अधिक मैं इस समस्या को देखता हूं, मुझे लगता है कि यह जावा 7 शुरू होने के साथ विंडोज 7 संबंधित समस्या होना चाहिए।
यह भी प्रतीत होता है कि अगर आप मिल व्यवहार करने के लिए खिड़कियों या यदि आप Windows की तुलना में कुछ अन्य मंच पर हैं विधि InetAddress.isReachable() के रूप में अच्छी तरह से इस्तेमाल किया जा सकता।
यह पुस्तकालय बहुत अच्छा लगता है। हालांकि यह वही कर रहा है जैसे हमारे मूल कोड पहले से ही कर रहे हैं, इसलिए मेरी समस्या विंडोज़ से संबंधित होनी चाहिए। – Knubo
हाँ, मुझे थोड़ा दर्दनाक होने के लिए जेएनआई पुस्तकालयों को लिखना मिल रहा है। तो, जब संदेह में - कुछ ऐसा उपयोग करें जो पहले से मौजूद है। क्या आपको यह lib lib 7 के साथ काम करने के लिए मिला है या यह भी असफल रहा है? – Andy
हमने Runtime.exec() के साथ जाने का फैसला किया क्योंकि हमें इसे हल करना है और आगे बढ़ना है। मुझे लगता है कि आपका जवाब अब तक का सबसे अच्छा है और इसे वास्तव में मेरा प्रश्न हल करना चाहिए, हालांकि मेरी समस्या नहीं है इसलिए मैं इसे स्वीकार करूंगा :) – Knubo