2012-10-15 15 views
6

Sunucu tarafı soketinden bir nesneyi TCP üzerinden istemci tarafındaki yuvaya göndermeye çalışıyorum. Sorunun nerede olduğunu bulamıyorum. Müşteri Side içinArrayList <String>, sunucu tarafından istemci tarafında TCP kullanarak soket üzerinden gönderiliyor mu?

import java.io.*; 
import java.net.*; 
import java.util.ArrayList; 

public class ServerSide { 

    public static void main(String[] args) { 
     try 
     { 
      ServerSocket myServerSocket = new ServerSocket(9999); 
      Socket skt = myServerSocket.accept(); 
      ArrayList<String> my = new ArrayList<String>(); 
      my.set(0,"Bernard"); 
      my.set(1, "Grey"); 
      try 
      { 
       ObjectOutputStream objectOutput = new ObjectOutputStream(skt.getOutputStream()); 
       objectOutput.writeObject(my);    
      } 
      catch (IOException e) 
      { 
       e.printStackTrace(); 
      } 
     } 
     catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 
    } 

} 

Kodu: Sunucu tarafı için

java.io.EOFException 
    at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2280) 
    at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2749) 
    at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:779) 
    at java.io.ObjectInputStream.<init>(ObjectInputStream.java:279) 
    at ClientSide.main(ClientSide.java:16) 

Kodu:

import java.io.*; 
import java.net.InetAddress; 
import java.net.Socket; 
import java.net.UnknownHostException; 
import java.util.ArrayList; 


public class ClientSide { 

    public static void main(String[] args) 
    { 
     try {  
      Socket socket = new Socket("10.1.1.2",9999); 
      ArrayList<String> titleList = new ArrayList<String>(); 
      try { 
       ObjectInputStream objectInput = new ObjectInputStream(socket.getInputStream()); //Error Line! 
       try { 
        Object object = objectInput.readObject(); 
        titleList = (ArrayList<String>) object; 
        System.out.println(titleList.get(1)); 
       } catch (ClassNotFoundException e) { 
        System.out.println("The title list has not come from the server"); 
        e.printStackTrace(); 
       } 
      } catch (IOException e) { 
       System.out.println("The socket for reading the object has problem"); 
       e.printStackTrace(); 
      }   
     } catch (UnknownHostException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

Sadece bir öneri: İnternet üzerinden yaptığınız nesneleri göndermeyin. Sadece ilkel türlerini gönder. Dize, Byte, Tamsayı, Float, Double, Char ve sonra her iki tarafta istediğiniz formata dönüştürün. – OmniOwl

+0

, birden fazla dizeyi gönderdi ve arraylisti yeniden oluşturuyor, bu daha iyi – Gianmarco

+0

@ Gianmarco: Bu iyi bir fikir ama yine de bir nesneyi nasıl göndereceğimi öğrenmek istiyorum ve aynı zamanda ödev belirtiminin bir parçası! – Bernard

cevap

5

değiştirilmesi İşte

Ben İstemci tarafında alıyorum hatadır set'dan add'a kadar olan numara

numarasını kullanıyor
ArrayList<String> my = new ArrayList<String>(); 
my.add("Bernard"); 
my.add("Grey"); 

ps. Diğerleri tarafından tavsiye edildiği gibi bu iyi bir fikir değildir, ancak sadece öğrenme için kullanın

+0

Bu mesajın yayınlanmasından 1 saat sonra, problemin programın% 100 iyi çalıştığını söyledikten sonra ayarlandığını gördüm. – Bernard

+0

Sadece merak ediyorum, varolan olmayan öğeler için kümeyi çağırdığınız için sunucu kodunuz bir IndexOutOfBoundsException atmadı mı? –

+0

@KlitosKyriacou: Maalesef hayır. Herhangi bir istisna atmadı, o yüzden 5 saatimi harcadım! – Bernard

İlgili konular