2012-11-05 3 views
-1

소켓을 통해 작성한 직렬화 가능 객체를 보내려면 이상한 문제가 있습니다. 실제로 서버와 클라이언트를 동일한 시스템에서 실행하면 제대로 작동하지만 서버와 클라이언트가 다른 시스템에있는 경우 서버 측의 readen 객체가 비어 있습니다 (크기는 0과 같습니다)소켓을 통해 직렬화 가능 객체 보내기

임의의 하나 그 문제를 해결할 생각인가?

서버 (코드가 우는 소리입니다) :

public static void main() { 
... 
InputStream is = mysocket.getInputStream(); 
ObjectInputStream ois = new ObjectInputStream(is); 

ArrayList<MyObject> list_of_object; 
list_of_object = (ArrayList<MyObject>) ois.readObject(); 
logger.log(Level.INFO,"object readen with size : "+list_of_object.size()); 
... 
} 

클라이언트 :

public static void main() { 
... 
ObjectOutputStream oos = new ObjectOutputStream(mysocket.getOutputStream()); 
oos.writeObject(list_of_object); 
... 
} 
+0

개체의 'size()'메서드는 무엇을합니까? 그리고 "서버 측의 readen 객체가 비어 있습니다 (크기가 0 인 경우)"라는 것은 무엇을 의미합니까? 더 자세한 내용과 설명이 필요합니다. –

+0

내 개체가 ArrayList이므로 ArrayList 개체의 크기 메서드입니다 (목록의 요소 수를 반환합니다). – user1027336

+0

'ArrayList'를 작성/읽는 중 왜 읽은 개체를'MyObject'에 캐스팅합니까? –

답변

0

MyObject - 클래스의 버전에 다음과 같은 테스트 케이스를 사용해보십시오. 문제를 파악하는 데 도움이 될 것입니다. 클래스와 잘 작동하면 네트워크 레이어 일 수 있습니다 (예 : 당신은 당신이 읽고 싶어하는 것과 다른 뭔가를 읽고 있습니다. 일반적인 실수는 서버 코드의 이전 버전을 어딘가에서 실행하고 있으며 MyObject의 빈 목록을 실제로 읽는 것일 수 있습니다.

import static org.junit.Assert.assertEquals; 

import java.io.ByteArrayInputStream; 
import java.io.ByteArrayOutputStream; 
import java.io.IOException; 
import java.io.ObjectInputStream; 
import java.io.ObjectOutputStream; 
import java.io.Serializable; 
import java.util.ArrayList; 

import org.junit.Test; 

public class StreamTest { 

public static class MyObject implements Serializable { 

} 

@Test 
public void test() throws Exception { 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    ObjectOutputStream oos = new ObjectOutputStream(baos); 
    ArrayList<MyObject> list_of_object = new ArrayList<MyObject>(); 
    list_of_object.add(new MyObject()); 
    oos.writeObject(list_of_object); 

    byte[] whatGoesOverWire = baos.toByteArray(); 
    ByteArrayInputStream bais = new ByteArrayInputStream(whatGoesOverWire); 
    ObjectInputStream ois = new ObjectInputStream(bais); 
    ArrayList<MyObject> deserialized = (ArrayList<MyObject>) ois 
      .readObject(); 
    assertEquals(1, list_of_object.size()); 
    assertEquals(1, deserialized.size()); 
} 

} 
관련 문제