मुझे Socket के InputStream पढ़ने के अजीब परिणाम मिल रहे हैं। जब मैं अपने प्रोग्राम से डेटा भेज रहा हूं तो मुझे एक बार वैध परिणाम मिल रहा है। जब मैं इसे अलग प्रोग्राम से कर रहा हूं तो मुझे वैध डेटा मिलता है लेकिन सर्वर उसी संदेश को पढ़ता रहता है, भले ही मैं कुछ भी नहीं भेजता, बस सॉकेट से कनेक्ट करें मुझे खाली सरणी मिलती है।

in = socket.getInputStream();
out = socket.getOutputStream();
dIn = new DataInputStream(in);

while(this.isAlive()) {
        try {
            dIn.read(buffer);

            StringBuilder builder = new StringBuilder();

            for(int i = 0; i < buffer.length; i++) {
                builder.append(buffer[i]).append(" ");
            }

            builder.append("\n");

            System.out.println(builder.toString());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

आउटपुट (सिर्फ सॉकेट से कनेक्ट करना):

0 0 0 0 0 0 0 0 
1
GPlayer 13 सितंबर 2018, 21:48

1 उत्तर

सबसे बढ़िया उत्तर

पढ़ें ():

रिटर्न:

बफ़र में पढ़े गए बाइट्स की कुल संख्या, या -1 यदि कोई और डेटा नहीं है क्योंकि स्ट्रीम का अंत हो चुका है।

आपका कोड उस परिणाम की जांच बिल्कुल भी नहीं कर रहा है। आप मानते हैं कि सभी बाइट पढ़ लिए गए थे, और वह बस काम नहीं करता (कभी-कभी)।

दूसरे शब्दों में: हमेशा हमेशा, जब आप किसी ऐसी read() विधि को कॉल करते हैं जो ऐसा मान लौटाती है, तो आपके कोड बिल्कुल को यह सुनिश्चित करने के लिए परिणाम की जांच करनी चाहिए कि (अपेक्षित) डेटा वास्तव में प्राप्त हुआ था अध्ययन।

सबसे अधिक संभावना है, यह आपकी समस्या का हिस्सा है। लेकिन वास्तव में सुनिश्चित होने के लिए, आपको अधिक जानकारी के साथ अपने प्रश्न को बढ़ाने की आवश्यकता होगी।

2
Community 20 जून 2020, 12:12