2013-10-24 10 views
5

मैंने नीचे एक सरल सर्वर और क्लाइंट उदाहरण लिखा था।सॉकेट बंद अपवाद

ग्राहक:

  • खुला एक कनेक्शन
  • outputstream जाओ, धारा है और उसे बंद उत्पादन धारा
  • प्राप्त InputStream और स्ट्रीम से पढ़ने का लिखें।

    public class DateClient { 
    
    public static void main(String[] args) throws UnknownHostException, 
         IOException, InterruptedException { 
        Socket sock = new Socket("127.0.0.1", 6013); 
        OutputStream outputStream = sock.getOutputStream(); 
        InputStream inputStream = sock.getInputStream(); 
    
        System.out.println("" + outputStream + "-" + inputStream); 
    
        PrintWriter printWriter = new PrintWriter(outputStream, true); 
        printWriter.println("Hi Server"); 
    
        outputStream.close(); 
    
        System.out.println(sock.isConnected()); 
    
        BufferedReader bufferedReader = new BufferedReader(
          new InputStreamReader(inputStream)); 
        String line; 
        while ((line = bufferedReader.readLine()) != null) { // Exception 
         System.out.println(line); 
        } 
    
    } 
    
    } 
    

    क्लाइंट में सॉकेट बंद अपवाद नीचे हो रही है: इस बिंदु

    public class DateServer { 
    public static void main(String[] args) throws InterruptedException { 
    ServerSocket serverSocket = null; 
    Socket client = null; 
    try { 
        serverSocket = new ServerSocket(6013); 
        while (true) { 
         client = serverSocket.accept(); 
         OutputStream outputStream = client.getOutputStream(); 
         InputStream inputStream = client.getInputStream(); 
    
         System.out.println("" + outputStream + "-" + inputStream); 
    
         BufferedReader bufferedReader = new BufferedReader(
           new InputStreamReader(inputStream)); 
    
         String line = null; 
         while ((line = bufferedReader.readLine()) != null) { 
          System.out 
            .println("Message recieved from client ::" + line); 
         } 
    
         PrintWriter printWriter = new PrintWriter(outputStream, true); 
    
         printWriter.println(new java.util.Date().toString()); 
    
         client.close(); 
        } 
    } catch (IOException exception) { 
        exception.printStackTrace(); 
        System.err.println(exception); 
    } 
        } 
    
        } 
    

क्लाइंट पर अपवाद हो रही है। क्या आप कृपया मुझे बता सकते हैं कि कारण क्या होगा।

Exception in thread "main" java.net.SocketException: Socket closed 
at java.net.SocketInputStream.socketRead0(Native Method) 
at java.net.SocketInputStream.read(SocketInputStream.java:146) 
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:282) 
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:324) 
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:176) 
at java.io.InputStreamReader.read(InputStreamReader.java:184) 
at java.io.BufferedReader.fill(BufferedReader.java:153) 
at java.io.BufferedReader.readLine(BufferedReader.java:316) 
at java.io.BufferedReader.readLine(BufferedReader.java:379) 
at edu.iub.cs.httpserver.DateClient.main(DateClient.java:32) 

उत्तर

6

java.net.SocketException सॉकेट बंद कर दिया है यह अपवाद मतलब है कि आप सॉकेट बंद कर दिया, और फिर इसे इस्तेमाल करने की कोशिश करते रहे।

os.close(); 

और आपने इसे यहां बंद कर दिया। या तो सॉकेट के इनपुट या आउटपुट स्ट्रीम को बंद करना अन्य स्ट्रीम और सॉकेट को बंद कर देता है।

+1

लेकिन 'println (sock.isConnected());' सच – Abhilash

+1

@Abhilash अप्रासंगिक प्रिंट कर रहा है। 'कनेक्ट किया गया है() 'आपको बताता है कि आपने कभी' सॉकेट 'से कनेक्ट किया है *** *** नहीं *** क्या यह अब जुड़ा हुआ है या नहीं। ('कनेक्टेड()' और 'isclosed()' विधियां * सॉकेट की स्थिति के बारे में हैं, * कनेक्शन की स्थिति नहीं।) – EJP

0

java.net.SocketException केवल तब उत्पन्न होता है जब आप सर्वर से पढ़ने से पहले OutputStream (या) सॉकेट बंद करते हैं।

अपने कोड से, निकालें:

OutputStream.close(); 

और फिर कोशिश ..

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