2013-03-06 1 views
4

J'envoie Object pour le client au serveur en modifiant cet objet côté serveur et en le renvoyant au client. L'envoi d'un formulaire d'objet client au serveur fonctionne correctement, mais lorsque je renvoie un objet, il donne une exception. Le socket est fermé. Voici le code. IntString et ParentObj sont des classes auxquelles j'envoie des objets.java.net.SocketException socket est fermé

classe Client1:

import java.net.*; 
import java.io.*; 

public class Client1 { 
    public static void main(String args[]) { 
     int arr[] = new int[10]; 
     int length = 6, i, counter_1; 
     ParentObj obj1; 
     for (i = 0; i < length; i++) { 
      arr[i] = i + 10; 
     } 
     try { 
      Socket s = new Socket("localhost", 6789); 
      IntString obj = new IntString(arr, length); 
      /* 
      * OutputStream os = s.getOutputStream(); 
      * ObjectOutputStream oos = new ObjectOutputStream(os); 
      * 
      * oos.writeObject(obj); 
      * oos.close(); 
      * os.close(); 
      */ 
      Send_recv snd = new Send_recv(s); 
      snd.sendObj((ParentObj) obj); 

      if (s.isClosed()) { 
       System.out.println("Closed"); 
       // s.connect(null); 
      } 
      obj1 = snd.recObj(); 
      obj = (IntString) obj1; 
      if (obj != null) { 
       for (counter_1 = 0; counter_1 < obj.length_of_row; counter_1++) { 
        System.out.println(obj.row[counter_1]); 
        obj.row[counter_1]++; 
       } 
      } 

      // s.close(); 

     } catch (Exception e) { 
      System.out.println(e); 
     } 
    } 
} 

Class Server

import java.net.*; 
import java.io.*; 

public class Server1 { 
    public static void main(String args[]) { 
     IntString obj; 
     ParentObj obj1; 
     int port = 6789, counter_1; 
     try { 
      ServerSocket ss = new ServerSocket(port); 
      Socket s = ss.accept(); 
      Send_recv rev = new Send_recv(s); 
      /* 
      * InputStream is = s.getInputStream(); 
      * ObjectInputStream ois = new ObjectInputStream(is); 
      * IntString obj = (IntString)ois.readObject(); 
      */ 
      obj1 = rev.recObj(); 
      obj = (IntString) obj1; 
      System.out.println(s.getInetAddress()); 
      System.out.println(s.getLocalAddress()); 
      if (obj != null) { 
       for (counter_1 = 0; counter_1 < obj.length_of_row; counter_1++) { 
        System.out.println(obj.row[counter_1]); 
        obj.row[counter_1]++; 
       } 
      } 
      if (ss.isClosed()) { 
       System.out.println("Closed ss"); 

      } 
      if (s.isClosed()) { 
       System.out.println("Closed in Server"); 

      } 
      Send_recv snd = new Send_recv(s); 
      snd.sendObj((ParentObj) obj); 

     } catch (Exception e) { 
      System.out.println(e + "In Server"); 
     } 

    } 
} 

classe Send_recv pour envoyer et recevoir des objets.

import java.io.*; 
import java.net.*; 

public class Send_recv { 
    Socket s; 
    IntString obj1; 

    public Send_recv(Socket s) { 
     this.s = s; 
    } 

    public void sendObj(ParentObj obj) { 
     try { 
      OutputStream os = s.getOutputStream(); 
      ObjectOutputStream oos = new ObjectOutputStream(os); 
      oos.writeObject(obj); 
      oos.close(); 
      os.close(); 
     } catch (Exception e) { 
      System.out.println(e); 
     } 
    } 

    public ParentObj recObj() { 

     try { 
      InputStream is = s.getInputStream(); 
      ObjectInputStream ois = new ObjectInputStream(is); 
      obj1 = (IntString) ois.readObject(); 
      ois.close(); 
      is.close(); 

     } catch (Exception e) { 
      System.out.println(e); 
     } 
     return (obj1); 
    } 
} 

Répondre

14
java.net.SocketException socket is closed 

Cette exception signifie que vous fermé la prise, puis a continué à essayer de l'utiliser.

os.close(); 

Et vous l'avez fermé ici. Fermeture soit l'entrée ou le flux de sortie d'un Socket ferme l'autre flux et le Socket.

+1

Merci monsieur pour votre aide. – user2138414

Questions connexes