का उपयोग कर मैं वर्तमान में एक सरल भेजूँ और मेरे नेटवर्क पर अन्य टीसीपी आधारित डिवाइस के लिए कुछ कच्चे आंकड़ों के प्राप्त करने के लिए ब्लैकबेरी पर कोई ऐप लिख रहा हूँ। मुझे ब्लैकबेरी सिम्युलेटर डब्ल्यू/एक एमडीएस सिम्युलेटर में चल रहा है और मेरी कंपनी के एमडीएस सर्वर से बात करने वाले एक भौतिक फोन का उपयोग कर एक ही समस्या है। ध्यान दें कि यह समस्या तब होती है जब वाईफ़ाई का उपयोग सीधे और एमडीएस के माध्यम से नहीं किया जाता है।जारी करना एक ब्लैकबेरी के साथ SocketConnection का उपयोग कर एमडीएस
समस्या InputStream पर उपलब्ध() फ़ंक्शन कि शून्य जब तक मैंने पढ़ा कॉल() पहला है। अगर मैं पहले पढ़ता हूं (जानना कि कुछ डेटा उपलब्ध है .. धन्यवाद wireshark) डेटा वापस आता है, और बाद में कॉल() को इंगित करता है कि कौन सा डेटा छोड़ा गया है जिसे मैंने नहीं पढ़ा। समस्या यह है कि मुझे हमेशा गारंटी नहीं दी जाएगी कि डेटा वहां होगा और इसलिए मैं ब्लॉक कर सकता हूं। क्या किसी को इसके बारे में पता है, और क्या यह एक समस्या या कुछ है जो डिजाइन द्वारा है?
अगर पढ़ने() विधि (रों) उन्हें उपलब्ध से अलग कॉल करने से पहले किसी को भी अवरुद्ध कर देगा एक तरह से के बारे में पता परीक्षण करने के लिए है?
SocketConnection s = (SocketConnection)Connector.open("socket://1.2.3.4:port;deviceside=false", Connector.READ_WRITE); OutputStream o = ((StreamConnection)s).openOutputStream(); InputStream i = ((StreamConnection)s).openInputStream(); o.write("hello"); Thread.sleep(sometime); if (i.available() > 0) { byte[] data = new data[10]; int bytesRead = i.read(data); System.out.println("Read [" + new String(data) + "] (bytes = " + bytesRead + ")"); }
मैं इस काम करने के लिए करता है, तो सशर्त बाहर टिप्पणी करने के लिए है:
यहाँ मैं क्या कर रहा हूँ मूल रूप से है।
यह ब्लॉक हो सकता है - लेकिन क्या यह समस्या है यदि आपका नेटवर्किंग अलग थ्रेड पर है? – lilbyrdie
मुझे लगता है कि मैंने दस्तावेज़ों में कहीं कहीं पढ़ा है कि यह निर्दिष्ट व्यवहार यह है कि उपलब्ध है। जैसा कि libyrdie कहते हैं धागे आपके दोस्त हैं। मैं पढ़ने के लिए एक थ्रेड स्पिन करता हूं और इसे ब्लॉक करने देता हूं। – Richard
आम तौर पर यह ठीक होगा।समस्या यह है कि हम यह पता लगाने की कोशिश कर रहे हैं कि डिवाइस मौजूद है या नहीं, यह देखकर सही तरीके से परिचालन कर रहा है कि यह एक विशिष्ट टीसीपी पिंग का जवाब देता है या नहीं। बस ब्लॉक को पढ़ने की इजाजत देने से ज्यादा मदद नहीं मिलती है। हमें मूल रूप से धागे को फेंकना होता है और फिर एक्स सेकंड के बाद इसे मारना पड़ता है। यह बहुत कठिन नहीं है, लेकिन आदर्श नहीं है। एमडीएस कनेक्शन के बजाय प्रत्यक्ष वाईफाई का उपयोग करते समय यह काम नहीं करता है, तो यह निराशाजनक नहीं होगा। यदि आप प्रत्यक्ष वाईफाई का उपयोग करते हैं, तो बहुत अच्छा काम करता है। – borq