2012-03-02 22 views
7

मैंने एक साधारण सॉकेट प्रोग्राम लिखा है, यह ठीक काम करता है, लेकिन मेरा दोस्त पोर्ट पोर्ट स्कैनिंग टूल का उपयोग करता है, जब यह उस पोर्ट को स्कैन करता है जिसका उपयोग मैं कर रहा हूं, यह "java.net.SocketException: टूटी पाइप" त्रुटि के साथ नकद है, क्या होता है? और इसे कैसे हल करें? कंसोल सेक्यों "java.net.SocketException: टूटा हुआ पाइप" होगा?

providerSocket = new ServerSocket(portNum); 
connection = providerSocket.accept(); 
if (connection.getOutputStream() != null) { 
    //this line crash!!! 
    out = new ObjectOutputStream(connection.getOutputStream()); 
    out.flush(); 

} 

विस्तार त्रुटि:

java.net.SocketException: Broken pipe 
    at java.net.SocketOutputStream.socketWrite0(Native Method) 
    at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92) 
    at java.net.SocketOutputStream.write(SocketOutputStream.java:136) 
    at java.io.ObjectOutputStream$BlockDataOutputStream.drain(ObjectOutputStream.java:1847) 
    at java.io.ObjectOutputStream$BlockDataOutputStream.setBlockDataMode(ObjectOutputStream.java:1756) 
    at java.io.ObjectOutputStream.<init>(ObjectOutputStream.java:230) 
+1

'connection.getOutputStream()' अशक्त वापस नहीं करता है। परीक्षण व्यर्थ है। – EJP

उत्तर

7

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

2

मुझे लगता है कि ऐसा तब होता है जब रिमोट एंड कनेक्शन बंद कर देता है;

-1

या तो सॉकेटएक्सप्शन और आईओएक्सप्शन के साथ खंड फेंक दिया गया है या अंततः मेरे दोस्त ने सुझाव दिया है कि अंत में प्रयास करें। आखिरकार आप जिस स्ट्रीम का उपयोग कर रहे हैं उसे बंद करना न भूलें। और क्लाइंट और सर्वर साइड प्रोग्राम्स दोनों पर अपने पोर्ट नंबर को भी देखें। Hopw यह मदद करेगा।

0

आपकी समस्या के कारण यहां हो सकता है:

JavaDoc:

भेजे कनेक्शन संकेत के लिए अधिकतम कतार की लंबाई (कनेक्ट करने के लिए एक अनुरोध) 50. पर सेट है एक कनेक्शन संकेत आता है कतार पूर्ण होने पर , कनेक्शन अस्वीकार कर दिया गया है।

और आप उदाहरण के लिए अपने ServerSocket की "बैकलॉग" पैरामीटर, वृद्धि करनी चाहिए

int backlogSize = 50 ; 
providerSocket = new ServerSocket(portNum, backlogSize); 
संबंधित मुद्दे