2017-05-18 15 views
7

में सॉकेट पर सुन रहा हूं, मैं एक एंड्रॉइड डिवाइस पर कुछ कोड के लिए ज़िम्मेदार हूं जो वायरलेस एक्सेस पॉइंट (डब्ल्यूएपी) के माध्यम से वाईफाई पर एक पीसी से बात करता है, टीसीपी भेजने वाले पैकेट का उपयोग कर और आगे। पीसी पक्ष पर सॉफ्टवेयर एंड्रॉइड डिवाइस के साथ पैकेट भेजने और प्राप्त करने के लिए विंसॉक का उपयोग करता है, लेकिन इस कनेक्शन के पीसी पक्ष पर मेरे पास कोई पहुंच नहीं है या नियंत्रण नहीं है।मैं कैसे बता सकता हूं कि मैं अभी भी एंड्रॉइड

यह वास्तुकला ठीक भेजने और प्राप्त करने के लिए, लेकिन अगर वहाँ वास्तव में 1 मिनट के लिए कोई यातायात है, तो पीसी, यह एक आरएसटी वापस हो जाता है Android के लिए एक पैकेट भेजने का प्रयास करता है जैसे कि एंड्रॉयड अब है अगर काम करता है सुन रहा। पीसी पक्ष पर विंसॉक, यह एक टाइमआउट है व्याख्या कर रहा है।

एंड्रॉइड डिवाइस को वाईफाई "हमेशा चालू" रखने के लिए कॉन्फ़िगर किया गया है। मैं अपने कोड में java.net (एंड्रॉइड एपीआई 16) सॉकेट का उपयोग कर रहा हूं। क्या मैं उस सॉकेट को समय-समय पर जांच सकता हूं, या एक घटना जो मैं प्राप्त कर सकता हूं यह देखने के लिए कि क्या मैंने सुनना बंद कर दिया है?

(संपादित) मैं विशेष रूप से है कि क्या एंड्रॉयड है सुनने की बात कर रहा हूँ। 1 मिनट के बाद एंड्रॉइड डिवाइस अभी भी भेज सकता है। यहाँ एक Wireshark का पता लगाने कि यह दिखाता है है:

  • 11 10.1.2.1 10.1.2.11 टीसीपी 79 42,825 → 181 [PSH, एसीके] Seq = 1 Ack = 1 जीत = 8170 लेन = 13 7
  • 12 10,1। 2.11 10.1.2.1 टीसीपी 89 181 → 40574 [पीएसएच, एसीके] सेक = 1 एएके = 14 विन = 25 9 लेन = 23
  • 13 10.1.2.1 10.1.2.11 टीसीपी 60 40574 → 181 [आरएसटी] सेक = 14 विन = 0 लेन = 0

एंड्रॉइड 10.1.2.1 है, पीसी 10.1.2.11 है। इस उदाहरण में मैंने एंड्रॉइड टू पीसी से एक प्रेषण शुरू किया, और यह ठीक हो गया। पीसी ने प्रतिक्रिया में कुछ भेजने की कोशिश की, लेकिन एंड्रॉइड ने एक [आरएसटी]

भी एनबी भेजा। कि यह केवल टीसीपी को संदर्भित करता है - यदि पीसी 1 मिनट के बाद एंड्रॉइड को पिंग करने का प्रयास करता है तो उसे अभी भी प्रतिक्रिया मिलती है, लेकिन पिंग आईसीएमपी है।

संपादित 2

किसी को देखने के लिए कि कैसे मैं सॉकेट बनाने चाहते थे। तो यहाँ यह है:

new SocketPermission(new String(new StringBuilder(configLGIP).append(":180-")), "connect,accept,listen");    
// Open a socket to the front end 
Log.d("StartTCP", "attempt IP " + configLGIP); 
try { 
    sock = new Socket(configLGIP, 180 + SafeActivity.pdanum); 
} 

बाद में मुझे क्या करना ...

if (sock != null) try { 
    sock.setTcpNoDelay(true); 
    bin = new BufferedInputStream(sock.getInputStream()); 
+0

मैं कैसे आप अपने TCP कनेक्शन बनाने को दिखाने के लिए (और क्या विन्यास के साथ) एंड्रॉयड तरफ आप एक सार्थक उत्तर देने के लिए उपयोगी हो सकता है कुछ कोड जोड़ने लगता है। – SergGr

+0

ठीक है, मैंने इसे जोड़ा है, लेकिन मुझे यकीन नहीं है कि यह कैसे मदद करता है क्योंकि यह केवल एक सामान्य सॉकेट है। सवाल वास्तव में है कि कैसे, एंड्रॉइड में, मैं बता सकता हूं कि मैं सुन रहा हूं, या अगर मुझे अधिसूचित किया जा सकता है अगर मैंने सुनना बंद कर दिया है। – user316117

+0

बस एफवाईआई मुझे लगता है कि आप वास्तव में यह निर्धारित करना चाहते हैं कि सॉकेट अभी भी * कनेक्ट * है, न कि यह * सुन रहा है *। वे दो अलग-अलग चीजें हैं, और सॉकेट सुनना या आपके मुद्दे से कोई लेना देना नहीं होगा। – alzee

उत्तर

0

आप संचार उपकरणों के लिए है।

  • Android डिवाइस
  • और पीसी

अपने Android डिवाइस एक आरएसटी करें जिसका मतलब है भेज रहा है, कि कोई भी सेवा संबोधित पोर्ट पर उपलब्ध है।

प्रोग्राम इस तरह के ध्वज और क्रमशः ध,

पता लगाने के लिए एक रॉ सॉकेट इंटरफ़ेस को लागू करने से अपने स्वयं के टीसीपी आंकड़ारेख बनाने क्रम में।

इस मामले में आप डेटाग्राम के शीर्षकों का विश्लेषण कर सकते हैं। इस तरह के सॉकेट को कार्यान्वित करने के लिए एक व्यवस्थापकीय विशेषाधिकार की आवश्यकता होती है (जो मुझे लगता है कि आपके पास पीसी पक्ष पर है)।

यहां more infos hier है!

आशा मैं मदद कर सकते हैं

+0

आपके द्वारा लिंक किया गया उदाहरण लिनक्स रूट स्तर पर प्रत्यक्ष प्रोग्रामिंग मानता है। लेकिन यह स्टॉक एंड्रॉइड है, जड़ डिवाइस नहीं है, और मेरे पास पीसी के लिए कोई प्रोग्रामेटिक एक्सेस नहीं है, इसलिए मैंने केवल एंड्रॉइड एपीआई ** से जो कुछ देखा है, उस तक पहुंच है, जैसा कि मैंने मूल प्रश्न में बताया है। इसलिए मुझे यकीन नहीं है कि आपका उत्तर मेरे प्रश्न से कैसे संबंधित है। यह वास्तव में एक बहुत ही सरल ** एंड्रॉइड प्रोग्रामिंग प्रश्न ** है - मैं एंड्रॉइड के बंदरगाह या सॉकेट स्थिति में बदलाव की अधिसूचना कैसे प्राप्त करूं? – user316117

संबंधित मुद्दे