में सॉकेट पर सुन रहा हूं, मैं एक एंड्रॉइड डिवाइस पर कुछ कोड के लिए ज़िम्मेदार हूं जो वायरलेस एक्सेस पॉइंट (डब्ल्यूएपी) के माध्यम से वाईफाई पर एक पीसी से बात करता है, टीसीपी भेजने वाले पैकेट का उपयोग कर और आगे। पीसी पक्ष पर सॉफ्टवेयर एंड्रॉइड डिवाइस के साथ पैकेट भेजने और प्राप्त करने के लिए विंसॉक का उपयोग करता है, लेकिन इस कनेक्शन के पीसी पक्ष पर मेरे पास कोई पहुंच नहीं है या नियंत्रण नहीं है।मैं कैसे बता सकता हूं कि मैं अभी भी एंड्रॉइड
यह वास्तुकला ठीक भेजने और प्राप्त करने के लिए, लेकिन अगर वहाँ वास्तव में 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());
मैं कैसे आप अपने TCP कनेक्शन बनाने को दिखाने के लिए (और क्या विन्यास के साथ) एंड्रॉयड तरफ आप एक सार्थक उत्तर देने के लिए उपयोगी हो सकता है कुछ कोड जोड़ने लगता है। – SergGr
ठीक है, मैंने इसे जोड़ा है, लेकिन मुझे यकीन नहीं है कि यह कैसे मदद करता है क्योंकि यह केवल एक सामान्य सॉकेट है। सवाल वास्तव में है कि कैसे, एंड्रॉइड में, मैं बता सकता हूं कि मैं सुन रहा हूं, या अगर मुझे अधिसूचित किया जा सकता है अगर मैंने सुनना बंद कर दिया है। – user316117
बस एफवाईआई मुझे लगता है कि आप वास्तव में यह निर्धारित करना चाहते हैं कि सॉकेट अभी भी * कनेक्ट * है, न कि यह * सुन रहा है *। वे दो अलग-अलग चीजें हैं, और सॉकेट सुनना या आपके मुद्दे से कोई लेना देना नहीं होगा। – alzee